gpt4 book ai didi

php - Laravel 关系中的按位和条件( Eloquent ORM)

转载 作者:可可西里 更新时间:2023-10-31 23:02:55 25 4
gpt4 key购买 nike

我正在尝试创建用户(模型)与组模型的专门关系。在我使用的模式中,组有一个类型属性,它是一个位掩码,其中每个位定义组的特定特征。

例如,我们可能有一个组:

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 条件添加到连接语句(关系)中。你知道怎么做吗?我需要扩展 Eloquent\Relation 类吗?

最佳答案

您可以使用 whereRaw 来执行原始的 where 子句。

Eloquent 不支持比 like= 和标准内容更花哨的 where 子句。我建议你看看the documentation

根据你的情况,你可能想使用类似的东西:

$belongsToMany->whereRaw('(type & 1<<25) != 0')

并将其添加到您的选择子句中。

如果你想调试你的 SQL,你可以使用:

DB::enableQueryLog();
//Execute Eloquent select
dd(DB::getQueryLog());

这样你还可以看到,如果你将位掩码之类的东西放在 where 子句的中间部分,它就会被替换为 =

关于php - Laravel 关系中的按位和条件( Eloquent ORM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34392332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com