【问题标题】:Filtering eloquent collection with foreign table's attribute使用外部表的属性过滤 eloquent 集合
【发布时间】:2019-08-05 05:19:08
【问题描述】:

我有一个用户表,我试图在通过属性 where "status" = "1" 过滤集合及其外部表 (user_details) 后将数据返回到视图。

我研究并尝试了许多网上建议的方法,例如

$users = Users::whereHas('details_id', function($query) {
    $query->where('status', '1');
})->get()->paginate(15);

但我得到一个错误

调用未定义的方法 App\Models\User::details_id()

这是我的用户模型:-

public function user_details() 
{
    return $this->hasOne(UserDetails::class, "id");
}

【问题讨论】:

  • 尝试:$users = Users::all()->get(); dd($users); 然后$users = Users::all()->with('user_details_table_name_here')->get(); dd($users); 看看结果有何不同。
  • 哪个表有details_id?事实上,你能显示两个表的列名吗?

标签: laravel eloquent


【解决方案1】:

当使用has 或whereHas 时,您应该使用关系名称(方法名称)而不是关联它们的字段名称:

$users = Users::whereHas('user_details', function($query) {
    $query->where('status','1');
})->paginate(15);

【讨论】:

  • 哦,谢谢!我更进一步,但现在我收到“方法 Illuminate\Database\Eloquent\Collection::links 不存在”的错误。我的分页不起作用
  • @zernzern1993 我已经更新了代码。对不起,我应该看看所有的。当调用paginate 时,你也不应该使用get。另外,你能告诉我details_id 的来源吗?我认为你们的关系可能没有正确建立。
  • 天哪,你是救生员!!!它现在可以工作了,如果您仍然想知道,那么 details_id 是用户表中指向 UserDetails 表中某一行的外键属性!非常感谢!
  • @zernzern1993 如果它正在工作,那么它应该没关系,但实际上user_details 关系应该是belongsTo。经验法则是,如果该表中的 *_id 列是 belongsTo。
  • 哦,我明白你的意思了!我要改!再次感谢队友!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多