【发布时间】:2013-08-07 22:12:49
【问题描述】:
我有一个活动模型和一个关卡模型。每个 Activity 都有一个 Level,所以我在 Activity 上有以下内容:
function level()
{
return $this->belongsTo('Level');
}
这在关卡上:
function activities()
{
return $this->hasMany('Activity');
}
然后我需要搜索具有特定级别的活动,所以我这样做:
$searchData = 'beginner';
$query = $query->has(array('level' => function($query) use ($searchData)
{
$query->where('name', 'LIKE', '%' . $searchData . '%');
}));
使用它会引发 LogicException:
Has method invalid on "belongsTo" relations.
所以我要么弄错了关系,要么我需要以不同的方式构建查询。
有什么建议吗?
【问题讨论】:
-
Level::with('activities')->where('name',$searchdata)->get();怎么样 -
@TryingTobemyself,这会起作用,但我正在搜索关卡模型。由于我正在搜索具有其他关系的活动(例如位置、类型等),因此将搜索查询保留为活动模型的一部分是有意义的。如果可能的话。
-
@RussBack,那你可以做
Level::with(array('activities','location','type'))->where('name',function($query) use($searchData){ $query->where('name', 'LIKE', '%' . $searchData . '%'); })->get(); -
只是出于好奇,DB 模型是什么样的?只是想知道为什么您需要使用字符串比较函数搜索名称,而不是例如 level == X 来查找某个级别的活动,或者 level > Y 来查找某个级别以上的活动。
-
@TorkilJohnsen,是的,你是对的,我的伪代码不在那里。我从具有多对多关系和数据透视表的应用程序的另一部分获取代码。从头再看一遍,Activity 模型有一个 level_id,所以我只能说 $query->wherelevel_id(X)。只是出于兴趣,如果我没有 ID 而是在 Level 表中有条目的字符串,有没有办法以我尝试的方式查找它?
标签: laravel laravel-4 eloquent