【问题标题】:laravel - how to give alias name to eloquent modellaravel - 如何为 eloquent 模型赋予别名
【发布时间】:2017-10-07 12:53:34
【问题描述】:
<?php

namespace App\Http\Models;
use Illuminate\Database\Eloquent\Model;
use Sofa\Eloquence\Eloquence;
use Sofa\Eloquence\Mappable;

class User extends Model
{
    use Eloquence, Mappable;

    public $id;
    public $name
}


$data= User::select('distinct User.name')->join('Member as m','User.id','m.userId')->whereRaw('User.name is not null')->get();

我想避免一直使用表名,而是想使用别名。

【问题讨论】:

  • 所以你不想像use语句那样写完整的路径?
  • 我想避免使用 User.id,User.name 而不是我想分别使用 u.id, u.name 通过提及 u 作为用户表 @NaumanZafar 的别名
  • 在这里找到类似问题的答案stackoverflow.com/questions/17713730/…

标签: laravel eloquent


【解决方案1】:

您可以为此使用Model::from 方法

<?php

    class User extends Model
    {
      use Eloquence, Mappable;

      public $id;
      public $name
    }
    $data= User::from('User as u')
             ->select('distinct u.name')
             ->join('Member as m','u.id','m.userId')
             ->whereRaw('u.name is not null')
             ->get();

注意:我看到很多赞成票,但这种方法不是好的做法。最好找到不同的方法。我的建议是留在常见的步行路径上。

【讨论】:

  • User as u 有点多余,因为模型应该知道自己的表名。希望 laravel 可以改善这一点。
  • @Sander Visser,我不认为你理解 Eloquent 的方法 from() 的实际作用......
【解决方案2】:

你可以添加

protected $table = 'users as u';  

-- users 就是你在 db 中的表名

并像这样使用它

User::where('u.id', 1229)->select('u.email')->get();

【讨论】:

    【解决方案3】:

    这对我有用:

    $query = Model::from('table as alias')->get();
    

    您可以通过以下方式进行检查:

    dd($query->toSql());
    

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多