Laravel / Eloquent - 查询

时间:2016-06-24 19:21:14

标签: php mysql laravel eloquent

通过将以下代码片段添加到Eloquent模型中,我可以强制模型在使用该模型进行的所有数据库调用中包含某些SQL约束:

public function newQuery($excludeDeleted = true)
{
    // Make use of all functionalities of the "newQuery" method of the
    // parent Eloquent class; and add constraints to that instance.
    $sql = parent::newQuery($excludeDeleted);

    // Example constraint
    $sql->where('example', 'test');

    return $sql;
}

但是,在例如添加约束时在上述WHERE `example` = 'test约束之后,将始终添加这些附加约束。

是否可以在添加所有其他约束后强制执行某个约束?而不是BEFORE?我需要遵守现有数据库索引的顺序。

1 个答案:

答案 0 :(得分:1)

首先,您应该使用global scopes来实现此功能,而不是覆盖newQuery方法。

其次,如果您唯一关心的是索引使用,则where子句中列的位置与索引选择无关。索引定义中列的顺序很重要,但不是where子句中的顺序。