Php 如何从Laravel 6中雄辩的关系中返回单个列?
我有一个模型“Post”,它有“id”、“name”、“content”和“status”列 我有一个“PostStatus”模型,它有“id”和“name”列 在Post.php上,我有以下内容:Php 如何从Laravel 6中雄辩的关系中返回单个列?,php,arrays,laravel,laravel-6,Php,Arrays,Laravel,Laravel 6,我有一个模型“Post”,它有“id”、“name”、“content”和“status”列 我有一个“PostStatus”模型,它有“id”和“name”列 在Post.php上,我有以下内容: class Post extends Model { public function status() { return $this->belongsTo('App\PostStatus','status'); } } 在其他地方的控制器中,我有: P
class Post extends Model
{
public function status()
{
return $this->belongsTo('App\PostStatus','status');
}
}
在其他地方的控制器中,我有:
Post::with('status')->get()->toArray();
它返回一个数组,其中所有文章的列值为'id','name'作为'content','status'作为来自Post status表中相关行的数据数组。我想要实现的是“status”列只是PostStatus模型中“name”列的字符串值,而不是整行的数组。我已经尝试在Post模型中的status函数上使用->select,但它仍然以数组的形式返回值。我宁愿避免直接使用SQL来实现我的目标
总之,我希望控制器中的函数返回:
array(4) {
["id"]=>
int(1)
["name"]=>
string(12) "Post Example"
["content"]=>
string(7) "Content"
["status"]=>
string(6) "Active"
}
而不是
array(4) {
["id"]=>
int(1)
["name"]=>
string(12) "Post Example"
["content"]=>
string(7) "Content"
["status"]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(6) "Active"
}
}
这并不是关系设计的真正目的,你可能会发现,你以后确实需要这种关系来做其他事情,所以凌驾于它之上可能不是最好的做法
您应该考虑使用一个访问器返回一个属性(例如,<代码> $POST-> StasuSuxNeX/COD>)。
类后扩展模型
{
//附加用于序列化的属性
$appends=['status_name'];
//获取名为“status\u name”的属性
公共函数getStatusNameAttribute()
{
返回$this->status->name???”;
}
公共职能地位()
{
返回$this->belongsTo('App\PostStatus','status');
}
}
注意:如果您打算这样做,那么在获取帖子时最好仍然使用和('status')
,因为这将防止Laravel对每个标签运行单独的查询。您甚至可能希望在Post模型的引导方法中将其作为全局作用域应用,因此您不必每次都这样做。这并不是关系设计的真正目的,你可能会发现,你以后确实需要这种关系来做其他事情,因此超越它可能不是最好的做法
您应该考虑使用一个访问器返回一个属性(例如,<代码> $POST-> StasuSuxNeX/COD>)。
类后扩展模型
{
//附加用于序列化的属性
$appends=['status_name'];
//获取名为“status\u name”的属性
公共函数getStatusNameAttribute()
{
返回$this->status->name???”;
}
公共职能地位()
{
返回$this->belongsTo('App\PostStatus','status');
}
}
注意:如果您打算这样做,那么在获取帖子时最好仍然使用和('status')
,因为这将防止Laravel对每个标签运行单独的查询。您甚至可能希望在Post模型的引导方法中将其作为全局作用域应用,因此您不必每次都这样做。不确定,但您可以在数组上使用count()并循环通过此。。试试这个,让我知道发生了什么不确定,但您可以在数组上使用count()并循环通过这个。。试试这个,让我知道会发生什么