簡體   English   中英

Laravel關系中的按位和條件(Eloquent ORM)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM