[英]Bitwise and condition in a Laravel relation (Eloquent ORM)
我試圖在用戶(模型)上創建一個專門的關系到組模型。 在我正在使用的模式中,組具有類型屬性,該屬性是位掩碼,其中每個位定義組的特定特征。
例如,我們可能有一個組:
name: New York
type: 33554436 (1<<25 | 1<<24)
使用純SQL,我可以通過查詢獲得感興趣的組:
select g.* from foobar_group g where (type & 1<<25) != 0
為了方便起見,我希望在用戶模型中定義這種關系,具體是:
<?php
class UserModel extends Illuminate\Database\Eloquent\Model
{
public function visitedCities()
{
return $this->belongsToMany(
GroupModel::class,
'foobar_group_member',
'user_id',
'group_id')
->with([ 'type' => function ($belongsToMany) {
$belongsToMany->where('type', '&',
GroupModel::CITY_TYPE,
GroupModel::CITY_TYPE)
}])
;
}
}
本質上,我試圖將上面的SQL查詢中的where條件添加到join語句(關系)。 你知道怎么做嗎? 我是否需要擴展Eloquent \\ Relation類?
您可以使用whereRaw
執行raw where子句。
Eloquent不支持更喜歡哪些條款比like
或=
和標准的東西。 我建議你看看文檔
我的情況你可能想要使用類似的東西:
$belongsToMany->whereRaw('(type & 1<<25) != 0')
並將其添加到您的select子句中。
如果要調試SQL,可以使用:
DB::enableQueryLog();
//Execute Eloquent select
dd(DB::getQueryLog());
這樣你也可以看到,如果你把任何像bitmasks這樣的東西放到where子句的中間部分,它就會被替換為=
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.