【问题标题】:How to get column data using eloquent relationship如何使用 eloquent 关系获取列数据
【发布时间】:2019-09-05 17:21:37
【问题描述】:

我不想得到sub-category 下的id category。我尝试使用

在路由文件中传递 id 的值

$categories->子类别->id

但是它给了我一个错误:

此集合实例上不存在属性 [子类别]。

这是我的关系:

类别

class Category extends Model
{
    protected $fillable = ([
        'name'
    ]);

    public function subcategory(Type $var = null)
    {
        # code...
        return $this->hasMany(Subcategory::class,'category_id','id');
    }
}

这是我的刀片

<form action="{{route('subcategory.update', $categories->subcategory->id)}}">
    <div class="modal-body">
        ...
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
    </div>
</form>

控制器

public function create()
{
    $categories = Category::all();
    // dd($categories);
    return view('settings.create', compact('categories'));
}

【问题讨论】:

  • 正如@dparoli 所说,subcategoryhasMany 关系,因此在$category-&gt;subcategory 中,您在一个集合中有多个,而不是一个subcategory。如果至少有一个结果,您需要访问其中一个以获取 ID $category-&gt;subcategory[0]-&gt;id
  • $categories 已经是一个集合,subcategory() 关系也是一个集合,因为它是一个hasMany 并且应该命名为subcategories(),所以现在你在@987654338 上遇到了这个错误@ 但如果您执行 $categories[0]-&gt;subcategory-&gt;id,您将在属性 id 上遇到相同的错误。因此,您必须决定是要检索多条记录还是只检索一条,但您没有发布控制器代码。
  • 我将编辑帖子以显示控制器代码@dparoli
  • 发布的函数是create(),所以您可能试图显示某个模型的创建表单,不清楚是Category 还是Subcategory。但是发布的表单有一个指向更新路线的动作。我无法理解您要做什么,但我不想调试您的所有代码,这不是 SO 的工作方式。发布的错误在提供的链接中已经有了很好的答案,在您解决了该错误后,您可以打开一个新问题,其中包含您可能遇到的其他错误以及所需的最少示例代码。

标签: php laravel eloquent


【解决方案1】:

听起来您的$categories 变量是Category::class 的集合?

请记住,subcategory 函数将返回多个项目,因为 HasMany

您可以尝试以下方法:

$categories->first()->subcategory->first()->id

$categories->subcategory->first()->id

如果没有,您可以将subcategory 关系添加到Category::class$with 数组中,这样它就会自动加载。然后再试一次。

要使用$with 数组:

class Category extends Model
{
    protected $with = ['subcategory'];
}

【讨论】:

  • $with 数组语法是什么样的?对不起,我是 Laravel 的新手
  • 没问题!它是:protected $with = ['subcategory'];我会用一个例子来更新答案
  • 你好,我现在开始工作了。 $categories-&gt;first()-&gt;subcategory-&gt;first()-&gt;id 是如何工作的?
  • $categories 变量包含一个类别集合,如果您在控制器中使用$categories = Category::all()$categories = Category::get() 定义它,那么在其上调用-&gt;first() 会返回集合中的第一个实例。 subcategory 也是如此,因为它是一个 HasMany,它返回一个 Collection 实例而不是单个 Model 实例。最后,您需要来自单个子类别的 -&gt;id 属性。您只能在单个实例上获取 id,或者使用 subcategory-&gt;pluck('id') 获取所有实例。希望这会有所帮助!
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 2020-02-28
  • 2017-07-07
  • 2020-11-22
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2014-10-29
相关资源
最近更新 更多