【问题标题】:Laravel eloquent relationship chainingLaravel 雄辩的关系链
【发布时间】:2020-03-14 10:23:53
【问题描述】:

我有3个表shares,share_users,users结构如下-

users ( Table ) -
     -id
     -name
     -email

shares( Table ) -
     -id
     -name

share_users - 
     -id
     -user_id
     -share_id

我想使用 Laravel eloquent 关系从共享模型中检索用户数据。

提前致谢。

【问题讨论】:

  • 只需定义从 Share 模型到 User 模型的多对多关系..?

标签: php laravel-5 psql


【解决方案1】:

如果您在 Share 模型中正确定义与 User 模型的多对多关系,如 https://laravel.com/docs/master/eloquent-relationships 中所述,您将能够轻松检索用户以进行共享。

添加到共享模型:

public function users()
{
    return $this->belongsToMany(App\User::class, 'share_users');
}

消费:

$share = Share::find(1);

foreach($share->users as $user) {
 dump($user);
}

【讨论】:

  • SQLSTATE[42P01]:未定义表:7 错误:关系“share_user”不存在第 1 行:...er_id”作为“pivot_user_id”来自“users”内部连接“share_use ... ^ (SQL: select "users".*, "share_user"."share_id" as "pivot_share_id", "share_user"."user_id" as "pivot_user_id" from "users" 内部连接 ​​"share_user" on "users"."id" = "share_user"."user_id" 其中 "share_user"."share_id" = 1)
  • Laravel 对数据透视表的默认设置是按字母顺序排列的单数名称。例如共享用户。看起来您有多个用户 - share_users。您可以通过重命名表来解决此问题,或者在定义关系时覆盖默认值,这是 belongsToMany() 的第二个参数,如我的答案中链接到的 eloquent-relationships 页面中所述。我已经用这个变化更新了我的答案。这能解决错误吗?
  • 是的,这是有效的,非常感谢。我真的很感激。 :-)
  • 很高兴能帮上忙!
猜你喜欢
  • 2015-03-14
  • 2018-11-28
  • 2015-01-11
  • 2021-06-03
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多