将关系数据直接附加到模型

时间:2019-07-14 00:37:32

标签: laravel orm eloquent relationship

商品模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Articles extends Model
{
    protected $table = 'articles';

    protected $primaryKey = 'idArticle';

    protected $fillable = [
        'idArticle', 'Topic', 'Image', 'Content', 'Views',
    ];

    protected $hidden = [
        'idCategory', 'idUser',
    ];

    public function category()
    {
        return $this->hasOne(Categories::class, 'idCategory', 'idCategory');
    }
}

因此,现在当我调用$article = Articles::find(1);时,它将从商品表返回数据,当我添加$article->category;时,它将添加数据$article->category->Name。我想将Name直接放在$article内-像$article->category(所以$article->category->Name$article->category中)可以使用模型类来定义还是我需要在控制器内部映射它?

2 个答案:

答案 0 :(得分:0)

您可以将自定义属性分配给Model类。但是您不能使用与category()方法相同的属性名称,因为$article->category已访问过该属性名称。

为您提供名为category_name的属性的示例

class Articles extends Model
{
    // attributes to append to JSON responses
    protected $appends = ['category_name'];

    // ... your other properties and methods

    // your custom attribute
    public function getCategoryNameAttribute()
    {
        if (!is_null($this->category)) {
            return $this->category->Name;
        }

        return '';
    }
}

用作:

$article->category_name

答案 1 :(得分:0)

您可以使用@matticustard提到的appends,也可以在检索模型时使用->with()方法:

$article = Articles::find($id)->with('category');

然后,您可以通过以下方式访问类别名称:

$categoryName = $article->category->name;

希望有帮助。