首页 > 解决方案 > 在 laravel 6 中访问多态数据透视表属性

问题描述

我正在尝试使用多态多对多关系。我有可以链接到几种不同类型模型的图像。每个模型可以有多个图像,但只能有一个默认图像(缩略图)。我想我可以通过向数据透视表添加一列来实现这一点,如下所示:

Schema::create('image_links', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('image_id');
        $table->unsignedBigInteger('image_links_id');
        $table->string('image_links_type');
        $table->boolean('default_image');
    });

我定义的关系如下:

图片:

public function model1()
{
    return $this->morphedByMany('App\Model1', 'image_links')->withPivot('default_image');
}

模态1:

public function image()
{
    return $this->morphToMany('App\Image', 'image_links')->withPivot('default_image');
}

在 Model1 控制器中,我正在查看 etch Madel1,如下所示:

$user = User::find(auth()->user()->id);

    foreach ($user->modal1as $model1) {

        $images = Image::find($model1->id);

        if (!empty($images)) {
            $model1->image = Image::find($model1->id);

            dd($model1);
        }

根据我所做的研究,我期望像这样访问 default_image 列:

$model1->default_image

但是当我 dd 时,它出现了 NULL。我需要能够搜索数据库并且只检索 default_image 设置为 1 的图像。

我认为这是可能的,但我似乎无法让它发挥作用。

我试过这样:

$image = Image::find($model1->id)->where('default_image = 1');
            // $images = Image::get();

            dd($image);

这将返回:

   Illuminate\Database\Eloquent\Builder {#302 ▼
  #query: Illuminate\Database\Query\Builder {#298 ▶}
  #model: App\Image {#317 ▶}
  #eagerLoad: []
  #localMacros: []
  #onDelete: null
  #passthru: array:17 [▶]
  #scopes: []
  #removedScopes: []
}

我看不到如何访问图像详细信息。

编辑:

这是我现在尝试过的其他一些事情。

我在 model1 控制器中,我想检索链接到 model1 且 default_image 值为 1 的图像。我认为我在第一个实例中没有正确查询数据库。我已经意识到

$images = Image::find($model1->id);

在当前 model1 id 处检索具有相同 id 的图像女巫不正确。我努力了

$images = App\Image::whereHasMorph( 'image_links', ['App\Model1'], function (Builder $query) { $query->where('id', 'like', $GLOBALS['id']); } )->get();

未找到返回类“App\Http\Controllers\App\Image”我查看了 App\ 并添加了使用 App\Image 并调用了未定义的方法 App\Image::image_links()。我现在真的迷失了这只需要帮助的蚂蚁。

2020 年 4 月 14 日更新。

我现在已更改image_linksimageables. 然而,这仍然没有奏效。我试图访问这样的图像:

use App\Model1

$modal1 = Model1::get();
return $model1->images;

这给了我这个错误:此集合实例上不存在属性 [图像]。

请问有人可以帮忙吗?

其他信息:我在 Windows 10 上运行 WAMP

标签: mysqldatabaselaravel-6

解决方案


推荐阅读