获取name而不是id一对一关系
Get name instead of ID one to one relationship
我有一个 make
table 和 post
table。 Make
table 将品牌名称保存为 make_code
和 make_name
。
Post table 有一个列 make
。在保存 post 时,它会在 make_code
.
中保存 make
在 blade 中显示时,我希望它显示为 make_name
。我该怎么做?
目前 {{$post->make}}
给我 make_code
。我需要它来显示 make_name
.
我认为这是一种 one-to-one 关系。我试着把它放在模型中但没有用。我怎样才能实现它?
制作模型
class Make extends Model
{
public function make()
{
return $this->belongsTo(App\Post::class);
}
}
POST 型号:
class Post extends Model
{
protected $table = 'posts';
}
更新
正如蒂姆·刘易斯注意到的那样:
the relationships can't be named make, as that's a conflict.
假设你们的关系是这样的:
- 一个
Make
有多个Post
- 一个
Post
属于一个Make
对象。
|注:如有错误请指正。
所以,如果这是正确的,你应该这样定义你的关系:
Post.php
public function make_rel()
{
return $this->belongsTo(Make::class, 'make', 'make_code');
}
Make.php
public function posts()
{
return $this->hasMany(Post::class, 'make', 'make_code');
}
Check the One-to-Many and One-to-Many (Inverse) relationship sections of the documentation.
因此,您可以在控制器中(或任何您想要的地方)执行以下操作:
$post = Post::find(1);
dd($post->make_rel->make_name); // 'Harley Davidson'
此外,您可以创建一个计算的 属性 作为快捷方式以在您的 Post 模型中访问此相关的 属性:
Post.php
// ...
public function getMakeNameAttribute()
{
return $this->make_rel->make_name;
}
现在,您可以像这样访问它:
$post = Post::find(1);
dd($post->make_name); // 'Harley Davidson'
建议
作为建议,我强烈建议您将外键列从 make
更改为 make_id
(在您的 'posts' table 中)以避免冲突。此外,鉴于此 link 几乎不可见并且由 Laravel 处理,因此您可以将 post 与 make 主键而不是自定义键相关联。这将加快查询的执行速度,因为默认情况下会为主要 ID 编制索引。
我有一个 make
table 和 post
table。 Make
table 将品牌名称保存为 make_code
和 make_name
。
Post table 有一个列 make
。在保存 post 时,它会在 make_code
.
在 blade 中显示时,我希望它显示为 make_name
。我该怎么做?
目前 {{$post->make}}
给我 make_code
。我需要它来显示 make_name
.
我认为这是一种 one-to-one 关系。我试着把它放在模型中但没有用。我怎样才能实现它?
制作模型
class Make extends Model
{
public function make()
{
return $this->belongsTo(App\Post::class);
}
}
POST 型号:
class Post extends Model
{
protected $table = 'posts';
}
更新
正如蒂姆·刘易斯注意到的那样:
the relationships can't be named make, as that's a conflict.
假设你们的关系是这样的:
- 一个
Make
有多个Post
- 一个
Post
属于一个Make
对象。
|注:如有错误请指正。
所以,如果这是正确的,你应该这样定义你的关系:
Post.php
public function make_rel()
{
return $this->belongsTo(Make::class, 'make', 'make_code');
}
Make.php
public function posts()
{
return $this->hasMany(Post::class, 'make', 'make_code');
}
Check the One-to-Many and One-to-Many (Inverse) relationship sections of the documentation.
因此,您可以在控制器中(或任何您想要的地方)执行以下操作:
$post = Post::find(1);
dd($post->make_rel->make_name); // 'Harley Davidson'
此外,您可以创建一个计算的 属性 作为快捷方式以在您的 Post 模型中访问此相关的 属性:
Post.php
// ...
public function getMakeNameAttribute()
{
return $this->make_rel->make_name;
}
现在,您可以像这样访问它:
$post = Post::find(1);
dd($post->make_name); // 'Harley Davidson'
建议
作为建议,我强烈建议您将外键列从 make
更改为 make_id
(在您的 'posts' table 中)以避免冲突。此外,鉴于此 link 几乎不可见并且由 Laravel 处理,因此您可以将 post 与 make 主键而不是自定义键相关联。这将加快查询的执行速度,因为默认情况下会为主要 ID 编制索引。