如何使用Laravel Eloquent运行存储在变量中的sql查询?

时间:2018-09-12 03:17:45

标签: laravel eloquent

我想运行一个存储在Laravel变量中的sql查询。只需运行$this->db->sql($sql),在CodeIgniter中确实很容易做到。我想知道Laravel中是否有这种方法。

  $sql = "SELECT u.*,c.city_name,prov.province_name FROM users u ".
        "LEFT JOIN cities c ON c.city_id=u.city_id".
        "LEFT JOIN provinces prov ON prov.province_id=u.province_id".
        "WHERE u.id= ?";

我尝试使用DB::table($sql)执行它,但是我猜不是那样。

编辑: 使用以下命令工作正常,但我仍然想知道是否可以通过运行$this->db->query($sql)来像在CI中那样运行。

$user = User::select('users.*','cities.city_name','provinces.province_name')
           ->where('users.id', Auth::id())
           ->leftJoin('cities','cities.city_id','=','users.city_id')
           ->leftJoin('provinces','provinces.province_id','=','users.province_id')
           ->get()->first();

3 个答案:

答案 0 :(得分:2)

您可以使用此

$users = DB::select('select * from users where active = ?', [1]);

请参阅文档https://laravel.com/docs/5.7/database#running-queries

如果你

$sql = "SELECT u.*,c.city_name,prov.province_name FROM users u ".
        "LEFT JOIN cities c ON c.city_id=u.city_id".
        "LEFT JOIN provinces prov ON prov.province_id=u.province_id".
        "WHERE u.id= ?";

尝试

$query_result = DB::select($sql, [your parameter variable]);

答案 1 :(得分:0)

在模型中创建雄辩的关系。如果模型之间存在关系,则不必创建长的SQL查询。您可以参考他们的文档。真的很容易理解。 https://laravel.com/docs/5.6/eloquent-relationships

答案 2 :(得分:0)

尝试一下:

$rows = DB::select(
    DB::raw($sql, array($stringids))
);