繁体   English   中英

Laravel 4-Laravel口才查询的SQL查询

[英]Laravel 4 - SQL query to Laravel Eloquent query

我正在做一个学校项目,正在尝试使查询工作。

SELECT *
FROM `ziekmeldingen` AS a
WHERE NOT EXISTS
    (SELECT *
     FROM `ziekmeldingen` AS b
     WHERE `ziek` = 1
       AND a.personell_id = b.personell_id)

型号名称:ZiekmeldingenModel

我尝试了两件事,都没有用->

$medewerkers = ZiekmeldingenModel::whereNotExists(function($query)
        {
            $query->select()->from('ziekmeldingen AS b')->where('ziek', '=', '1')->where('ziekmeldingen.personell_id', '=', 'b.personell_id');
        })->get();
    return $medewerkers;

$medewerkers = ZiekmeldingenModel::raw('SELECT * FROM `ziekmeldingen` as a WHERE NOT EXISTS ( SELECT * FROM `ziekmeldingen` as b WHERE `ziek` = 1 AND a.personell_id = b.personell_id)')->get();

他们两个都返回表中的所有结果,而它只应返回1个结果(我已经测试了原始查询,它可以工作)。

编辑:忘了提及我在模型中使用关系。 因此原始解决方案可能仍然无法正常工作

找到了答案。 必须同时使用我尝试过的两种方法。

$medewerkers = ZiekmeldingenModel::select()
                    ->from(DB::raw('`ziekmeldingen` AS a'))
                    ->whereNotExists(function($query){
                          $query->select()
                          ->from(DB::raw('`ziekmeldingen` AS b'))
                          ->whereRaw('`ziek` = 1 AND a.personell_id = b.personell_id');
                    })->get();

return $medewerkers;

感谢您的帮助和努力。

绝对不需要select() 也没有生在fromwhereRaw需要。

唯一不寻常的事情是原始位置,因为您不想将table.field绑定并视为字符串。 另外,如果为表加上前缀,则可以对整个子句使用whereRaw ,否则最终将得到DB_PREFIX_a.personell_id类的DB_PREFIX_a.personell_id ,因此显然是错误的。

这是您的操作方式:

$medewerkers = ZiekmeldingenModel::from('ziekmeldingen AS a')
  ->whereNotExists(function ($q) {
     $q->from('ziekmeldingen AS b')
       ->where('ziek', 1)
       ->where('a.personell_id', DB::raw('b.personell_id'))
       // or:
       // ->whereRaw('a.personell_id = b.personell_id');
  })->get();

使用take()方法,但是,如果不对结果进行排序,则返回的记录可能是任何结果。

$medewerkers = ZiekmeldingenModel::raw('SELECT * FROM `ziekmeldingen` as a WHERE NOT EXISTS ( SELECT * FROM `ziekmeldingen` as b WHERE `ziek` = 1 AND a.personell_id = b.personell_id)')->take(1)->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM