mysql - 在 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_links
为imageables
. 然而,这仍然没有奏效。我试图访问这样的图像:
use App\Model1
$modal1 = Model1::get();
return $model1->images;
这给了我这个错误:此集合实例上不存在属性 [图像]。
请问有人可以帮忙吗?
其他信息:我在 Windows 10 上运行 WAMP
解决方案
推荐阅读
- cocoa - NSOutlineView 检测子项何时折叠
- java - Spring Cloud Stream 多主题事务管理
- javascript - 如何使用 Javascript 有效地确定 HTML 文档中兄弟元素的相对顺序
- aws-lambda - 无法通过用户凭据访问 api 网关
- angular - 所有观察到的 NGXS 选择器是否都会在任何状态更改时执行?
- javascript - 在等待中使用外部函数并使用回调
- android - 如何在 5 分钟后停止通知 FLAG_INSISTENT?
- sql-server - MVC 项目中的 Rdlc 报告能够切换数据库
- c# - 用于员工树形视图的 JSON
- dart - 飞镖传播运算符说“如果它不为空,请将其放入列表中”