laravel - 通过加入列的 JSON 对象键获取结果
问题描述
点表 - 列:id、json_column
[
{"user_id":"1","points":"1"},
{"user_id":"2","points":"1"},
{"user_id":"3","points":"0"},
]
用户表 - 列:id、name
1 | steve
2 | matthew
3 | john
预期结果。所有使用 eloquent 获得积分的用户
1-steve-1
2-matthew-1
3-john-0
$users=User::all();
是否可以使用with语句获取输出
编辑:
点模型
protected $casts = [
'json_column' => 'json'
];
用户模型
public function point()
{
return $this->hasOne(Point::class, 'json_column->user_id', 'id');
}
打印的查询 - 但它返回 null:
select *
from `points`
where json_unquote(json_extract(`points`.`json_column`, '$."user_id"')) in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
如果单个 json 数组在列中,则此方法有效:
{"user_id":"1","points":"1"}
如果它包含数组数组,则代码不起作用
[
{"user_id":"1","points":"1"},
{"user_id":"2","points":"1"},
{"user_id":"3","points":"0"},
]
编辑 2:转换为数组。但不工作
protected $casts = [
'application_data' => 'array'
];
解决方案
是的,假设您已经创建了User和Point模型:
用户模式
class User extends Model
{
protected $table = 'users';
protected $guarded = [];
public function point()
{
return $this->hasOne(Point::class, 'json_column->user_id');
}
}
点模态
class Point extends Model
{
protected $table = 'points';
protected $guarded = [];
protected $casts = [
'json_column' => 'json'
];
}
然后您可以使用 with 急切加载用户点
推荐阅读
- c# - C#下载文件并上传相同的文件作为流抛出SocketException
- vb.net - 使用 OLEDB 访问 Access 数据库时获取 E_OUTOFMEMORY
- html - 根据用户选择的下拉菜单设置表单字段的默认值
- powershell - 使用 Pester 5 和 PowerShell 7 模拟类函数
- c# - 不断出现错误:无法访问 Asp.net Core 中间件上的已关闭流
- maven - 目前有什么方法可以使用 Artifact Registry 镜像官方 maven repo?
- c# - 如何确定在关机时调用 IHostedServices 的顺序?
- c# - 协程只执行一次
- python - 使用 zipfile 在 python 中创建文件夹的 zip
- javascript - 素材UI卡根据输入变化