雄辩的关系WHERE声明不起作用

时间:2017-09-26 06:09:51

标签: php mysql sql laravel eloquent

我试图检索所有“假期”的列表。结合' HolidayInfo'这是各自的表名。

这是我试图使用的查询:

    $holidays = Holidays::with('info')->where('country', $country)->get();

使用此查询时;我收到以下错误:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'country' in 'where clause' (SQL: select * from `holidays` where `country` = australia)"

似乎没有执行连接。即使在写作假期_info.country'它仍然没有按预期工作。

在进行$holidays = Holidays::with('info')->get();的vardump时我得到了这个:

enter image description here

很明显,这种关系正在建立,但不包含在查询中。

以下是正在使用的表格:

enter image description here enter image description here

我雄辩的模特:

度假

protected $table = 'holidays';
protected $primaryKey = 'holiday_id';
public $timestamps = false;
public $incrementing = false;
public function info(){
    return $this->hasOne('App\HolidayInfo', 'holiday_id','holiday_id');
}

假日信息:

protected $table = 'holiday_info';
public $timestamps = false;
protected $primaryKey = null;
public $incrementing = false;
public function holidays(){
    return $this->belongsTo('App\Holiday', 'holiday_id', 'holiday_id');
}

我不确定为什么两个表之间的连接在顶级查询中不起作用。好像国家在holiday_info中被认为是一个字段,因此显示连接未正确完成。任何想法可能是什么问题?

2 个答案:

答案 0 :(得分:4)

我认为它的代码可以帮助你

$holidays = Holidays::whereHas('info', function($info) use($country){
    $info->where('country', $country);              
})->get();

Eloquent Relationship

答案 1 :(得分:0)

尝试这种方法。你必须使用函数来加入并使用其中的条件

$holidays = Holidays::with(['info' => function($query) use($country){
            $query->where('country', $country);
         } ])->get();