【问题标题】:How to load relationship with Eloquent?如何加载与 Eloquent 的关系?
【发布时间】:2020-04-13 14:50:41
【问题描述】:

我有一个 Link 模型,每个链接都有一个所有者(由 DB 中的 ownerId 表示,它是 User 表的外键)。

这是链接模型:

<?php namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;

class Link extends Model {

protected $table = "Link";

// ...

// Relationships
public function owner()
{
    return $this->belongsTo(User::class, 'ownerId', 'id');
}

}

当我在我的 LinkController 中使用 $data = Link::find($linkId)-&gt;toJson(); 时,所有者包括在内,但在 JSON 数据中为空。我也试过$data = Link::with('owner')-&gt;find($linkId)-&gt;toJson();$data = Link::find($linkId)-&gt;load('owner')-&gt;toJson();

当我使用$data = Link::find($linkId)-&gt;owner-&gt;toJson(); 时,我得到了用户数据。我的代码中是否缺少某些内容?

有没有办法在链接对象中加载所有者并通过 JSON 获取它而无需额外的请求/步骤?

【问题讨论】:

  • 你试过append吗? laravel.com/docs/5.7/…
  • 是的,我试过了,但它不起作用。奇怪的是我可以使用Link::find($linkId)-&gt;owner 获取所有者,但不能使用其他方法。

标签: php laravel eloquent lumen eloquent-relationship


【解决方案1】:

我终于找到了问题所在。我的用户表中的主键不是标准的(它是字符串键而不是 int)。 我在我的用户模型中添加了以下几行:

public $incrementing = false;
public $keyType = 'string';

现在$data = Link::with('owner')-&gt;find($linkId); 工作正常。

【讨论】:

    【解决方案2】:

    $data = Link::with('owner')->find($linkId)->get();

    【讨论】:

    • 使用-&gt;get() 将返回数据库中的所有行。
    • 但是当您使用 find 方法时,您无法返回所有记录。它应该得到单条记录
    • 仅使用 find 方法,您将获得一条记录。但是最后添加 get 方法将返回所有记录。用 laravel 6.2 测试
    • 那么你就可以使用这个方法了。它将返回单个记录。它是 $data = Link::with('owner')->find($linkId);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2017-07-27
    • 2018-05-26
    • 2016-11-21
    • 2022-10-09
    • 1970-01-01
    相关资源
    最近更新 更多