【问题标题】:Equivalent Laravel Eloquent for raw SQL query用于原始 SQL 查询的等效 Laravel Eloquent
【发布时间】:2021-02-02 13:50:04
【问题描述】:

我最近开始学习 php 和 laravel 框架。目前我正在学习 Eloquent 查询来存储和检索数据库中的数据。我能够执行简单的选择、插入等查询,但是我试图理解更复杂的语句,包括连接。

这是我要翻译的查询,例如: $sql = "SELECT p.id , p.name" from clients c INNER JOIN partners p ON c.id = p.p_id where p.id = :param";

这可以正常工作并提供输出,但是转换后的 Eloquent 不提供相同的输出。这个原始 SQL 查询到 Laravel Eloquent 的正确转换是什么?另外,如果您对 Eloquent 中的联接有一点了解,我们也将不胜感激。

这是我尝试过的:

DB::table('clients as c')
     ->join('partners as p', 'c.id', '=', 'p.c_id')
     ->where('p.id', '=', ':param')
     ->select('p.id' , 'p.name')
     ->get();

【问题讨论】:

    标签: php sql laravel eloquent query-builder


    【解决方案1】:

    最后的参数是您传递给查询构建器的变量...

    对于join,非常简单易懂

    DB::table('clients as c')
         ->join('partners as p', 'c.id', '=', 'p.c_id')
         ->where('p.id', '=', $paramerterVariable)
         ->select('p.id' , 'p.name')
         ->get();
    

    【讨论】:

    • 这是一个错字,因为我是手写的。更新
    • 谢谢。有效。我给了它错误的参数。 :)
    【解决方案2】:
    Client::join('partners as p', 'clients.id', '=', 'p.p_id')->where('p.id',  $paramerterVariable)
    ->where('client_id', $clientId)
                ->select('p.id' , 'p.name')
                ->get();
    

    p.p_id应该是合作伙伴表中的client_id

    这是用于原始 SQL 查询的 Laravel Eloquent,或者您也可以将 laravel 关系与延迟加载和急切加载一起使用

    $client = Client::where('id', $clientId);
    $partners = $client->partners();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2019-05-31
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多