Laravel Eloquent - 查找和其他查询

时间:2014-05-19 07:08:38

标签: laravel eloquent

为什么我不能将find用于其他查询?我希望能够找到id = 2otherColumn = thisValue的内容。但是,如果我使用find(2)并添加其他查询,那么我得到的sql查询是where 'id' = ?并返回所有ID。为什么呢?!

由于

2 个答案:

答案 0 :(得分:0)

find($id)会自动在$primaryKey列中找到具有相同值的记录,您可以在模型中设置$primaryKey。如果您希望使用其他查询,则应使用where()

您的查询应该是这样的:

Model::where('id','=',2)->where('otherColumn','=','thisValue')->get();

答案 1 :(得分:0)

您可以将find与其他查询一起使用,但不需要使用find的其他查询,因为find方法使用primary key查询数据库,如果您让一个用户拥有主键,例如,id=1然后它不能是两次,意味着它必须是唯一的,使用find的其他查询是没用的。 find中的Illuminate\Database\Eloquent\Model方法会调用find类的Illuminate\Database\Eloquent\Builder方法,该方法如下:

public function find($id, $columns = array('*'))
{
    if (is_array($id))
    {
        return $this->findMany($id, $columns);
    }

    $this->query->where($this->model->getKeyName(), '=', $id);

    return $this->first($columns);
}

如果你使用这样的东西:

User::where('username', 'someuser')->find(1);

它会起作用(find应该最后调用,它会调用firstfirst调用get)但在这种情况下它没有用;与find。主键可以是任何字段;不仅idgetKeyName会检索它。