【问题标题】:How to select from whereIn clause using Laravel Eloquent ORM or Query Builder?如何使用 Laravel Eloquent ORM 或 Query Builder 从 whereIn 子句中进行选择?
【发布时间】:2017-12-07 15:19:42
【问题描述】:

我想通过下面的 MySQL 使用 Eloquent ORM 来获得价值。

MySQL 查询 -

SELECT * FROM `users` WHERE `is_super_admin` = 1 OR `is_partner` = 1 
OR `is_admin` = 1 OR `id` IN 
(select `user_id` from `site_userrole_mapper` where `is_site_owner` = 1)

Laravel 查询(不起作用)-

Users::Where('is_super_admin', '=', 1)
        ->orWhere('is_partner', '=', 1)
        ->orWhere('is_admin', '=', 1)
        ->orWhereIn('id', [
            DB::table('site_userrole_mapper')
            ->select('user_id')
            ->where('is_site_owner', '=', 1)
            ->get()
            //Here get() returns an object and we're not able compare it with id
        ])
        ->get();

我只想在 Eloquent ORM 中转换上面的 MySQL 查询。感谢您的帮助。

【问题讨论】:

  • 您是否为site_userrole_mapper 表定义了模型?
  • 不,我没有为 site_userrole_mapper 定义模型。这就是我在 site_userrole_mapper 中使用 table 子句的原因。

标签: mysql laravel eloquent


【解决方案1】:

试试这个,

更改此查询并采摘user_id

whereIn('id',[
DB::table('site_userrole_mapper')
        ->select('user_id')
        ->where('is_site_owner', '=', 1)
        ->get()
   ])

whereIn('id',
DB::table('site_userrole_mapper')
        ->where('is_site_owner', '=', 1)
        ->pluck('user_id')
      )

【讨论】:

  • 太好了,恭喜
【解决方案2】:

你可以试试这个

Users::Where('is_super_admin', '=', 1)
    ->orWhere('is_partner', '=', 1)
    ->orWhere('is_admin', '=', 1)
    ->orWhereIn('id', 
        DB::table('site_userrole_mapper')
        ->where('is_site_owner', '=', 1)
        ->pluck('user_id')
        //Here get return an object and we're not able compare it with id
    )
    ->get();

【讨论】:

    【解决方案3】:

    您可以在该对象上使用->toArray() 将其转换为数组,以便IN 子句正常工作:

    Users::where('is_super_admin', '=', 1)
            ->orWhere('is_partner', '=', 1)
            ->orWhere('is_admin', '=', 1)
            ->orWhereIn('id', 
                DB::table('site_userrole_mapper')
                ->select('user_id')
                ->where('is_site_owner', '=', 1)
                ->get()->toArray()
            )->get();
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2020-02-20
      • 2015-09-28
      • 2023-03-29
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多