【问题标题】:Adding Multiple Where Clause from Model in Laravel在 Laravel 中从模型中添加多个 Where 子句
【发布时间】:2019-02-26 13:55:19
【问题描述】:

我正在尝试清理我的代码并处理模型

我将以下 2 个表格分解如下:

滚动台

|id|roll_id|member_id|.......

成员表

|id|first_name|last_name|rank|

我的滚动模型上有以下内容

public function member()
{
    return $this->belongsTo('App\Member');
}

这在我的会员模型上

public function roll()
{
    return $this->hasMany('App\Roll');
}

虽然以下代码确实返回了正确的结果

$roll = Roll::with(['member'])
        ->where('status', '!=', 'A')
        ->get();

return ($roll);

我想添加一个额外的 where 子句

->where('rank','<', 12)

但是,我收到以下错误

SQLSTATE[42S22]:找不到列:1054 未知列 'member.rank' 在“where 子句”中(SQL:select * from Roll where roll_id = 4 和 status != A 和`mem ▶"

【问题讨论】:

  • 你试过 whereHas 吗?
  • 我想你在找this
  • @Ishann 该帖子指的是 1 个表,这是 2 个,我面临的问题是它确实使用上面提供的代码找到了 member.rank 列,Roll::with(['member' ]) 正在返回 2 个表之间的正确链接,我可以将 where 子句应用于 Roll Table,我也不能应用于成员表

标签: laravel model


【解决方案1】:

您可以使用whereHas 方法过滤关系:

$roll = Roll::with(['member'])
    ->where('status', '!=', 'A')
    ->whereHas('member', function($query) {
        $query->where('members.rank', '<', 12);
    })
    ->get();

希望这能解决您的问题。

【讨论】:

  • 完美,谢谢 - 现在知道我需要参考表格而不是 $query 中的模型
  • 您需要使用应用此条件的型号名称。
  • 模型名称失败但表名有效,所以对我来说 member.rank 失败(其中 member 是模型),但 members.rank 有效(其中 members 是表名)
  • whereHas 方法中的第一个参数将是关系的名称,在该查询中使用它时,它将是表名 members.rank。
  • 是否可以在 HTML 刀片视图中定义它?我想拉出我所有的 Roll and Count 军官等级(等级 18)。这将节省我多次完成代码,谢谢
猜你喜欢
  • 2015-01-23
  • 1970-01-01
  • 2020-09-28
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多