php - Laravel:来自 JSON 的雄辩关系
问题描述
仍在 Laravel 中练习。此时,我有一个页面控制器,它可以找到相应页面可用的所有部分(简单的 HTML 部分)并将它们包含在刀片中,如下所示:
@foreach(@sections as @section)
@include('sections.' . $section->filename)
然后我有一个sections
包含相应部分数据的表,以及columns
一个包含 JSON 数据的列,如下所示:
{"header":"Section column 1", "text":"bruh?", "image_id":""},
{"header":"Section column 2", "text":"bruh?", "image_id":""},
{"header":"Section column 3", "text":"bruh?", "image_id":"7"}
如您所见,image_id
应该images
使用 Eloquent 关系从表中调用文件名(我假设它将是一对多)。
是的,我知道将 JSON 存储在表中并不是最好的解决方案(尤其是如果你想从它交叉请求数据),但这是我想出的最好的解决方案。
所以,问题是:如何仅使用来自 JSON 对象的 ID 获取图像的文件名,或者除了 JSON 之外是否有任何不同的解决方案?
PScolumns
表和 JSON 格式用于定义一些属性,因为我的某些部分有 3-9 个文本列 ( col-md-3
),并且每个部分都有不同的标题、文本和图像,所以我将它们存储在 JSON 中。
PPS 我的 JSON 格式是有效的,我只是删除了一些格式以保持这个问题清晰。
解决方案
Laravel 没有对 JSON 关系的原生支持。
我为此创建了一个包:https ://github.com/staudenmeir/eloquent-json-relations
class Section extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'columns' => 'json',
];
public function image()
{
return $this->belongsTo(Image::class, 'columns->image_id');
}
}
class Image extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function sections()
{
return $this->hasMany(Section::class, 'columns->image_id');
}
}
{{ $section->image->filename }}
推荐阅读
- swift - 带有保留字的 Swift Codable
- swift - 复制 Array.reduce() 方法
- php - PhpSpreadsheet 条件格式单元格(填充)
- php - 尝试使用 php mysql 登录
- c# - 如何在 Xamarin Forms 中从父级调用子 xaml 中的方法?
- python - c++ 上的嵌入式 python。更改调试器时发生错误
- python - 在python中选择下拉列表中的值时如何激活函数
- cassandra - 在 Cassandra 中将时间转换为 12 小时格式
- node.js - 如何获取 Passport.js 认证策略的错误信息?
- python - 如何网页抓取特定文本并将其转换为数字?