【问题标题】:Using the has() method a Laravel BelongsTo relation使用 has() 方法建立 Laravel BelongsTo 关系
【发布时间】: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


【解决方案1】:

只是为了关闭这个,@TorkilJohnsen 在 cmets 中回答了它。

我从具有多对多关系和数据透视表的应用程序的另一部分获取代码。从头再看一遍,Activity 模型有一个 level_id,所以我可以这样做:

$query->wherelevel_id(X)

只是出于兴趣,如果我没有 ID 而是在 Level 表中有条目的字符串,有没有办法以我尝试的方式查找它?大概是某种查找关卡名称并返回 ID 的闭包?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 2018-03-08
    • 2019-05-26
    • 2020-01-15
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多