【问题标题】:Accessing a property on a method which returns a Model in Laravel在 Laravel 中访问返回模型的方法的属性
【发布时间】:2018-01-13 07:28:30
【问题描述】:

我有一个 Post 模型,其功能如下:

namespace App;

use App\Category;

class Post extends Model

{
    public function category()
   {

    return $this->hasOne(Category::class);

   }

}

我的类别模型看起来像这样

namespace App;

use App\Post;

class Category extends Model
{
    public function posts()
    {

    return $this->hasMany(Post::class);

    }
}

在我看来,我想访问每个帖子类别中的 name 字段。

我假设我可以访问该模型,因此可以通过在我的刀片文件中执行此操作来获取它:

{{ $post->category()->name }}

$post 是正确的,我可以访问其他属性,但这会引发错误:

Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$name

有什么想法吗?

【问题讨论】:

    标签: php laravel model eloquent blade


    【解决方案1】:

    您应该将其作为属性访问:

    {{ $post->category->name }}
    

    函数 category() 应该在 Post 模型中定义为:

    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id');
    }
    

    如果category_id有别的名字,在参数里改一下就行了。

    【讨论】:

    • 这会引发“尝试获取非对象的属性”错误。
    • Post 有一个category_id 字段?或者Category 有一个post_id 字段?
    • 该字段仅称为类别。但是已经通过并将其更改为 category_id 我收到错误“SQLSTATE[42S22]: Column not found: 1054 Unknown column 'categories.post_id'”
    • 类别也没有帖子 ID。以防万一这会影响到这个
    • 仍然收到“试图获取非对象的属性”错误,但我怀疑我的 Eloquent 关系完全错误。我的类别表没有保存 post_id。我只想通过 id 引用类别名称,而不是属于它们的帖子列表。这可能吗? :(
    【解决方案2】:

    您可以轻松做到这一点:

    $category=$post->category;
    $cat_name=$category->name;
    

    如果您只想要可以使用的类别的名称字段:

    $cat_name=$post->category()->get(['name']);
    

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 2019-03-09
      • 2019-10-15
      • 2012-02-06
      • 2019-05-12
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多