雄辩的关系 WHERE 语句不起作用

Oli*_*ski 1 php mysql sql laravel eloquent

我正在尝试检索所有“假期”与“HolidayInfo”相结合的列表,它们是各自的表名。

这是我尝试使用的查询:

    $holidays = Holidays::with('info')->where('country', $country)->get();
Run Code Online (Sandbox Code Playgroud)

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

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

似乎没有执行连接。即使在写“holiday_info.country”时它仍然无法按预期工作。

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

在此处输入图片说明

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

以下是使用中的表:

在此处输入图片说明 在此处输入图片说明

我的雄辩模型:

假期

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');
}
Run Code Online (Sandbox Code Playgroud)

假期信息:

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');
}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么两个表之间的连接在顶级查询中不起作用。似乎国家未被识别为假日信息中的字段,因此显示连接未正确完成。任何想法可能是什么问题?

小智 5

我认为它的代码可能会帮助你

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

雄辩的关系