Laravel Eloquent -包含多个参数的查询



我是Laravel框架的新手,我可能需要你的一些帮助。

有人能帮我把这个请求转换成Eloquent吗?

SELECT * FROM `non_working_days` WHERE YEAR(date) = "2021" AND (country = "Paris" OR country = "Madrid")

目前我已经设法找到了一个解决方案,但我正在运行与参数数量一样多的查询。

foreach ($calendar as $code) {
array_push(
$data,
Model::query()
->whereYear('date', '=', $year)
->where('country', $code)
->get()
);
}

所以它归结为:

SELECT * FROM `non_working_days` WHERE YEAR(date) = "2021" AND country = "Paris"
SELECT * FROM `non_working_days` WHERE YEAR(date) = "2021" AND country = "Madrid"

所以我不认为这是非常有效的知道我可能会有更多的参数。

感谢

您可以使用where方法:

$countries = ['Paris', 'Madrid']; // or use $calendar instead if it's an array
$data = Model::query()
->whereYear('date', '=', $year)
->whereIn('country', $countries)
->get();

这会给你一个这样的查询:

SELECT * FROM `non_working_days` WHERE YEAR(`date`) = "2021" AND `country` IN ("Paris", "Madrid");

你可以做到,通过

Model::query()
->whereYear('date', '=', $year) 
->where( function( $whereQry ) use( $country_1, $country_2 ) {
$whereQry->orWhere( 'country', $country_1 );
$whereQry->orWhere( 'country', $country_2 );
})
->get();

它会转换成你需要的东西,

SELECT * FROM `non_working_days` WHERE YEAR(date) = "2021" AND (country = "Paris" OR country = "Madrid")

你可以使用where in来实现这一点,你不需要为这个做循环,像这样:-

Model::query()
->whereYear('date', '=', $year)
->whereIn('country', $calendar)
->get()

最新更新