没有从关联 table 获取数据:Laravel
No data fetched from associated table : Laravel
我有users
和user_roles
表,user_roles的id被用作users
中的foreign key
。我使用 User::with('userRole')->find($user)
从 users
获取数据。在返回的结果中 userRole
存在,但它是空的,相反它应该具有来自 user_roles
的特定 foreign key
的数据。
请分享该功能可能存在的问题,或者是否有人可以简要解释 laravel 协会的工作方式。
/* User Model */
public function userRole()
{
return $this->belongsTo('App\UserRole');
}
/* UserRole Model */
public function user()
{
return $this->hasMany('App\User');
}
谢谢,
Laravel 中的多对多关系通常需要您拥有 2 models
和 3 tables
。一对多关系要求您有 2 models
和 2 tables
。一对一关系还要求您有 2 models
和 2 tables
.
多对多关系
让我们以User
和Role
模型为例,因为每个User
可以有多个角色,一个Role
可以分配给不同的用户,你自然会想要一个Many to many
关系。现在,您将需要创建一个中间 table 来存储结果,为什么?因为您已经定义了 User
和 Role
并且因为它是 Many to many
none 这些对象将在其中包含另一个对象的任何标识符,而是将具有它们的在中间 table 中拥有自己的标识符,这就是 Laravel
获取关系的方式,它将 Models
主键与 intermediate table
内部的 foreign key
连接起来。
一对多关系
我们再拿User
和Role
模型来说,这次一个Role
可以分配给多个用户,但是一个User
只能有1 Role
。当然,您的 User
模型中会有一个字段 role_id
,您将连接来自用户的 role_id
和来自角色的 id
。
一对一关系
让我们再次使用 User
和 Role
模型 :D 假设您想为每个用户创建一个单独的 Role
,那么您将拥有 2 models
和 2 tables
您的用户 table 将拥有所有用户,您的角色 table 将包含 id, name, user_id
现在当您尝试检索关系时,如果您定义 one to one
laravel 将 return 只有 1 个结果,无论你是否在 roles table
上有多个相同的 user_id
,Laravel
将 return 只有 1 个角色,因为你明确地告诉他这是 1-to-1
关系。
编辑:
这里有一个 one to one
关系的例子:
/* User Model */
public function userRole()
{
return $this->belongsTo('App\UserRole', 'user_role_id', 'id');
}
@Tim 和@Nikola
谢谢小伙伴们的努力
但是,我找到了问题背后的原因。这是因为 userRole
函数在 User
模型中的命名错误。
我使用 user_roles
的 foreign key
作为 users
table 中的 user_roles_id
并在 [=] 中定义了名称为 userRole
的函数11=] 模型。这导致 ORM 找不到用于附加 user_roles
数据的相关列。
解决方案是我必须将 user_roles_id
的名称更改为 user_role_id
或将 userRole
函数名称更改为 userRoles
。我选择第一个,效果很好。 :)
关于laravel的命名约定请参考Laravel - Database, Table and Column Naming Conventions?。
我有users
和user_roles
表,user_roles的id被用作users
中的foreign key
。我使用 User::with('userRole')->find($user)
从 users
获取数据。在返回的结果中 userRole
存在,但它是空的,相反它应该具有来自 user_roles
的特定 foreign key
的数据。
请分享该功能可能存在的问题,或者是否有人可以简要解释 laravel 协会的工作方式。
/* User Model */
public function userRole()
{
return $this->belongsTo('App\UserRole');
}
/* UserRole Model */
public function user()
{
return $this->hasMany('App\User');
}
谢谢,
Laravel 中的多对多关系通常需要您拥有 2 models
和 3 tables
。一对多关系要求您有 2 models
和 2 tables
。一对一关系还要求您有 2 models
和 2 tables
.
多对多关系
让我们以User
和Role
模型为例,因为每个User
可以有多个角色,一个Role
可以分配给不同的用户,你自然会想要一个Many to many
关系。现在,您将需要创建一个中间 table 来存储结果,为什么?因为您已经定义了 User
和 Role
并且因为它是 Many to many
none 这些对象将在其中包含另一个对象的任何标识符,而是将具有它们的在中间 table 中拥有自己的标识符,这就是 Laravel
获取关系的方式,它将 Models
主键与 intermediate table
内部的 foreign key
连接起来。
一对多关系
我们再拿User
和Role
模型来说,这次一个Role
可以分配给多个用户,但是一个User
只能有1 Role
。当然,您的 User
模型中会有一个字段 role_id
,您将连接来自用户的 role_id
和来自角色的 id
。
一对一关系
让我们再次使用 User
和 Role
模型 :D 假设您想为每个用户创建一个单独的 Role
,那么您将拥有 2 models
和 2 tables
您的用户 table 将拥有所有用户,您的角色 table 将包含 id, name, user_id
现在当您尝试检索关系时,如果您定义 one to one
laravel 将 return 只有 1 个结果,无论你是否在 roles table
上有多个相同的 user_id
,Laravel
将 return 只有 1 个角色,因为你明确地告诉他这是 1-to-1
关系。
编辑:
这里有一个 one to one
关系的例子:
/* User Model */
public function userRole()
{
return $this->belongsTo('App\UserRole', 'user_role_id', 'id');
}
@Tim 和@Nikola 谢谢小伙伴们的努力
但是,我找到了问题背后的原因。这是因为 userRole
函数在 User
模型中的命名错误。
我使用 user_roles
的 foreign key
作为 users
table 中的 user_roles_id
并在 [=] 中定义了名称为 userRole
的函数11=] 模型。这导致 ORM 找不到用于附加 user_roles
数据的相关列。
解决方案是我必须将 user_roles_id
的名称更改为 user_role_id
或将 userRole
函数名称更改为 userRoles
。我选择第一个,效果很好。 :)
关于laravel的命名约定请参考Laravel - Database, Table and Column Naming Conventions?。