用于 maria-db 动态列的 Laravel 雄辩包装器
Posted
技术标签:
【中文标题】用于 maria-db 动态列的 Laravel 雄辩包装器【英文标题】:Laravel eloquent wrapper for maria-db dynamic columns 【发布时间】:2021-04-28 05:48:33 【问题描述】:据我所知,哪个MariaDb
有一个Dynamic columns
,数据库中此列的数据应该是blob
。
动态列存储在一个真正的 blob 列中
在MariaDb
sql 命令中,我们可以使用CREATE_COLUMN
创建一些列,使用GET_COLUMN
从blob
获取一些列
例如:
插入数据:
INSERT INTO bird_sightings
(human_id, time_seen, observations)
VALUES
(27, NOW(),
COLUMN_CREATE('wing-shape','pointed',
'bill-shape','all-purpose', 'main-color','gray') );
从数据库中获取查询:
SELECT name_first AS 'Birder',
DATE_FORMAT(time_seen, '%b %d') AS 'Date',
COLUMN_GET(observations, 'wing-shape' AS CHAR) AS 'Wings',
COLUMN_GET(observations, 'wingspan' AS INT) AS 'Span (cm)',
COLUMN_GET(observations, 'bill-shape' AS CHAR) AS 'Beak'
FROM bird_sightings
JOIN humans USING(human_id);
现在我想知道什么?这个结构是否有任何Eloquent
包装器,与它们一起使用ORM
?或者我如何在Laravel
中使用这个结构@
【问题讨论】:
【参考方案1】:在没有自己测试的情况下,我认为您可以尝试在模型中添加以下内容:
public function newEloquentBuilder($query)
$query->addSelect(DB::raw("COLUMN_GET(observations, 'wing-shape' AS CHAR)"));
$query->addSelect(DB::raw("COLUMN_GET(observations, 'wingspan' AS CHAR)"));
$query->addSelect(DB::raw("COLUMN_GET(observations, 'bill-shape' AS CHAR)"));
return parent::newEloquentBuilder($query);
如果您只想为特定查询临时获取它们,您可以在查询构建器中添加上述选择,例如
$sighting = BirdSighting::selectRaw("name_first AS 'Birder',
DATE_FORMAT(time_seen, '%b %d') AS 'Date',
COLUMN_GET(observations, 'wing-shape' AS CHAR) AS 'Wings',
COLUMN_GET(observations, 'wingspan' AS INT) AS 'Span (cm)',
COLUMN_GET(observations, 'bill-shape' AS CHAR) AS 'Beak'")->get()
【讨论】:
在覆盖newEloquentBuilder
方法后你能帮我吗?我该如何使用它?我怎样才能将query
传递给那个?
每当您执行BirdSighting::where(condition)
之类的操作时,都应该调用newEloquentBuilder
方法来创建一个新的查询构建器,在这种情况下,新的构建器将使用这些额外的选择创建,因此不应该有进行查询时,您还需要做些什么才能在模型中获取这些列以上是关于用于 maria-db 动态列的 Laravel 雄辩包装器的主要内容,如果未能解决你的问题,请参考以下文章