【问题标题】:Laravel Eloquent Advance QueryingLaravel Eloquent 高级查询
【发布时间】:2021-08-16 08:53:49
【问题描述】:

我在 Laravel 上有 5 个不同的表 projects, systems, attachments, tasks, users 我没有为每个表分配关系我想要做的是使用 ID 链接每个表。

$objFetch = Task::addSelect(
            [
                'project_id' => Project::select('title')->whereColumn('project_id', 'projects.id'),
                'tester_id' => User::select('name')->whereColumn('tester_id', 'users.id'),
                'system_id' => System::select('name')->whereColumn('system_id', 'systems.id'),
                'assigned_id' => User::select('name')->whereColumn('assigned_id', 'users.id'),
            ],
        )->paginate(20);

这将返回预期的输出为

       {
            "id": 1,
            "document_auto_id": 101,
            "document_type": null,
            "document_name": "Tasks",
            "file_name": "Task_394_1622175671_195.png",
            "file_extention": "png",
            "file_size": "105383",
            "note": null,
            "created_at": "2021-05-28T04:21:11.000000Z",
            "updated_at": "2021-05-28T04:21:11.000000Z"
        },

问题是否有任何解决方案可以获取每个任务的附件?

Laravel Eloquent 高度赞赏回答而不是查询构建

【问题讨论】:

  • 我看不到共享的表与共享的查询或显示的结果有何关系。
  • 我找到每个表ID的值
  • 我还是不清楚。您共享的表格中的任何地方似乎都没有对系统或项目的任何引用。
  • @apokryfos,请检查我的回答。我所做的是解决我的问题

标签: laravel eloquent query-builder laravel-7 laravel-query-builder


【解决方案1】:

DB 表通常相互关联。因此我们可以使用表 ID 来获取输出。发生错误是因为我没有在模型上定义它。 问题已按照我的步骤解决

型号

class Task extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'priority',
        'project_id',
        'system_id',
        'tester_id',
        'assigned_id',
        'description',
        'status',
    ];

    protected $casts = [
        'attachments' => 'array',
    ];

    public function Attachment()
    {
        return $this->hasMany(Attachment::class, 'document_auto_id');
    }

    public function Project()
    {
        return $this->hasOne(Project::class, 'id', 'project_id');
    }

    public function System()
    {
        return $this->hasOne(System::class, 'id', 'system_id');
    }
    public function assignedTo()
    {
        return $this->hasOne(User::class, 'id','assigned_id');
    }

    public function testerTo()
    {
        return $this->hasOne(User::class, 'id','tester_id');
    }
}

使用相关表获取数据

$objFetch1 = Task::with(
            'testerTo',
            'assignedTo',
            'System',
            'Project',
            'Attachment'
        )->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2017-10-22
    • 2018-10-21
    • 2015-06-09
    • 2014-11-05
    • 2021-10-02
    相关资源
    最近更新 更多