【问题标题】:Laravel Model relationship is not workingLaravel 模型关系不起作用
【发布时间】:2019-03-25 09:04:08
【问题描述】:

我正在从事 Laravel 项目,但面临关系问题。

我有 CarAddress 模型和用户模型

在 caraddress 表中,我有 id,sessionId,

在 users 表中,我有 id 和 sessioId。

CarAddress 模型中的代码

protected $table = 'caraddress';
public $primaryKey ='id';
function users(){
    return $this->belongsTo('App\User','sessionId');
}

用户模型中的代码

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

控制器代码 $carAddress = CarAddress::with('users')->get(); 返回 $carAddress;

结果是:

[
{
"id": 25,
"sessionId": "dqEeucFqkNzSUQtPxqdxqvJbCqyrAuVXVqIf3y6l",
"residentialStatus": "homeowner",
"addressYears": "1",
"addressMonths": "0",
"totalMonths": "12",
"postcode": "SW1A 2AA",
"buildingNumber": null,
"street": "10 Downing Street",
"town": "London",
"county": null,
"country": null,
"buildingName": null,
"userRefference": "FFD",
"created_at": "2018-10-20 22:30:44",
"updated_at": "2018-10-19 20:18:22",
"users": null
}
]

【问题讨论】:

  • 以及应该返回的内容
  • 用户不应为空...因为表中有用户数据
  • 所以你需要在关系中指定。您只为一个表指定了 sessionId。 Laravel 默认为外来的 id,这通常是正确的调用。
  • 是的,根据他上面的问题,我认为他有一个与 userId 相关的列 sessionId
  • 请注意belongTo关系可以接受3个参数,第一个是相关类,第二个是子表的外键,第三个是与父表中第二个参数相关的列

标签: php laravel


【解决方案1】:

如果要连接两个表中的sessionId,需要同时指定两个key:

function users(){
    return $this->belongsTo('App\User','sessionId', 'sessionId');
}

您的代码还有其他一些奇怪之处:

  1. 拥有一个 id 而不将其用作外键是非常不寻常的。我希望你知道你在这里做什么。
  2. 由于这是一个 belongsTo(one 到 many),所以关系不应该是复数。
  3. 如果这是一个新数据库,您应该遵循命名约定 对于 Laravel。 (session_id)

我强烈建议您在此处阅读整个文档:https://laravel.com/docs/5.7/eloquent-relationships

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2018-01-10
    • 2014-01-09
    • 2015-03-11
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2015-09-24
    • 2017-07-15
    相关资源
    最近更新 更多