如何在 laravel 中使用 whereHas
how to use whereHas in laravel
我是 laravel 的新手,
我需要为数据库创建一个查询,
$query = Deal::query();
我想使用 wherehas 运算符。
这是我的有效代码。
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus);
// \Log::info('The request precedence: '.$precedenceStatus);
}
我也想将此代码添加到查询中
if($person) {
$query->whereHas('personnel', function ($subQuery) use ($person) {
$subQuery->where('id', '=', $person);
});
}
所以我需要更改第一个代码?
如何将第一个代码转换为 wherehas?
第一个代码来自 table deal,第二个代码来自 realtionship called personnel。
第二部分在代码的其他地方工作,我只需要修复第一部分并且不明白在使用中写什么
我尝试了这个,但在最后一个错误}
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus)
-> when ($person, function($query) use($person) {
$query->whereHas('personnel', function ($query) use ($person) {
$query->where('id', '=', $person);
});
})
}
你可以使用一个名为 when( 的方法,这样你就可以拥有更简洁的代码。第一个参数 if true 将执行你的条件语句。
https://laravel.com/docs/9.x/queries#conditional-clauses
$result = $query
->where('precedence', '=', $precedenceStatus)
->when($person, function ($query) use ($person) {
$query->whereHas('personnel', fn ($q) => $q->where('id', '=', $person));
})
->get();
您还应该能够在使用 when( 之前清理您的优先级代码,使整个事情更清晰一些。
在 laravel 中查询数据库非常简单,您只需要执行您想要执行的查询,然后您只需将其替换为 laravel helpers.Or 即可如果您不明白要使用哪个函数,请编写原始查询。
使用,DB::raw('write your sql query')
.
现在大部分时间whereHad用于过滤特定模型的数据。
更喜欢这个 link,[Laravel 查询官方文档][1] 就像你有 1 对 m 的关系这样你就可以从一个部分或多个部分中检索多个对象 object.like我想过滤一个用户的很多评论,那我就这样吧
$comments = Comment::whereHas('user', function (Builder $query) {
$query->where('content', 'like', 'title%');
})->get();
$comments = 这里是你想要的模型 retrive::whereHas('relationship name', function (Builder $query) {
$query->where('content', 'like', 'title%');
})->get();
你也可以在whereHas里面写whereHas。
[1]: https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence
我是 laravel 的新手, 我需要为数据库创建一个查询,
$query = Deal::query();
我想使用 wherehas 运算符。 这是我的有效代码。
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus);
// \Log::info('The request precedence: '.$precedenceStatus);
}
我也想将此代码添加到查询中
if($person) {
$query->whereHas('personnel', function ($subQuery) use ($person) {
$subQuery->where('id', '=', $person);
});
}
所以我需要更改第一个代码? 如何将第一个代码转换为 wherehas? 第一个代码来自 table deal,第二个代码来自 realtionship called personnel。 第二部分在代码的其他地方工作,我只需要修复第一部分并且不明白在使用中写什么
我尝试了这个,但在最后一个错误}
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus)
-> when ($person, function($query) use($person) {
$query->whereHas('personnel', function ($query) use ($person) {
$query->where('id', '=', $person);
});
})
}
你可以使用一个名为 when( 的方法,这样你就可以拥有更简洁的代码。第一个参数 if true 将执行你的条件语句。
https://laravel.com/docs/9.x/queries#conditional-clauses
$result = $query
->where('precedence', '=', $precedenceStatus)
->when($person, function ($query) use ($person) {
$query->whereHas('personnel', fn ($q) => $q->where('id', '=', $person));
})
->get();
您还应该能够在使用 when( 之前清理您的优先级代码,使整个事情更清晰一些。
在 laravel 中查询数据库非常简单,您只需要执行您想要执行的查询,然后您只需将其替换为 laravel helpers.Or 即可如果您不明白要使用哪个函数,请编写原始查询。
使用,DB::raw('write your sql query')
.
现在大部分时间whereHad用于过滤特定模型的数据。 更喜欢这个 link,[Laravel 查询官方文档][1] 就像你有 1 对 m 的关系这样你就可以从一个部分或多个部分中检索多个对象 object.like我想过滤一个用户的很多评论,那我就这样吧
$comments = Comment::whereHas('user', function (Builder $query) {
$query->where('content', 'like', 'title%');
})->get();
$comments = 这里是你想要的模型 retrive::whereHas('relationship name', function (Builder $query) { $query->where('content', 'like', 'title%'); })->get();
你也可以在whereHas里面写whereHas。 [1]: https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence