【问题标题】:Laravel Dingo get data from multiple tablesLaravel Dingo 从多个表中获取数据
【发布时间】:2019-01-31 13:15:36
【问题描述】:

我正在尝试从具有一对多关系的两个表中检索数据。我需要它在一个响应中返回,因为它将同时显示。但是,我不明白如何返回扩展对象。现在我在控制器中有这样的东西

public function show(Site $id)
    {
        foreach ($id->features() as $feature) {
            $id->features[] = $feature;
        }

        return $id;
    }

这是我的模型

class Site extends Model
{
    protected $fillable = ['path', 'site_link'];

    public $timestamps = false;

    public function features() {
        return $this->hasMany('App\SiteFeature');
    }
}

现在它返回一个空的 features 属性数组。

【问题讨论】:

    标签: php laravel dingo-api


    【解决方案1】:

    如果您正在使用隐式模型绑定,那么 Lazy eager 在控制器操作中加载 features 关系,因为模型已经加载

    public function show(Site $site)
    {
        $site->load('features');
    
        return $site;
    }
    

    如果没有隐式模型绑定,则在模型加载时使用 with 预加载 features

    public function show($id)
    {
        $site = Site::with('features')->find($id);
    
        return $site;
    }
    

    查看详情加载关系https://laravel.com/docs/5.6/eloquent-relationships#constraining-eager-loads

    【讨论】:

    • 如果我尝试使用with而不是load,为什么它不起作用
    • @Sergey 当模型已经加载然后加载他们的关系我们必须使用load 这被称为Lazy eager loading 但是如果模型还没有加载那么你可以使用@987654331 指定你的关系名称模型加载时的 @ 关键字称为 Eager Loading。有关详细信息,您可以查看答案中的链接。希望它可以清除你
    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多