回答

收藏

Laravel Eloquent支持MariaDb动态列

技术问答 技术问答 186 人阅读 | 0 人回复 | 2023-09-13

对于 Maria-DB* 和 MySQL 支持的 动态 列,我们具有JSON列类型。对于我们的项目之一,我们应该为 Maria-) {: `$ I' k9 E
DB
(不是 Mysql )实现一个数据库。
  ***! X; x! s3 X' H; t1 h
使用包支持“ 动态列”yii2-dynamic-ar。9 |3 {2 a9 C+ E7 Z, Z
如何可以覆盖Eloquentorm中Laravel进行添加dynamic-
. v. L' @9 P) Q, [. d. W+ D! b# jcolumns。在Yii将此功能添加到ActiveRecord此类中的包中,可以覆盖ActiveRecord该类( O! Q8 n( r+ D; \, \# `- ~3 k
Yii框架中支持ActiveRecordORM的实现类:
6 x( l) @% K4 v- \7 r1 Q( x[ol]DynamicActiveRecord.php% _$ G" W- `0 D5 \* n9 c
DynamicActiveQuery.php9 a4 L+ F+ ~( r) y. N
[/ol]2 G" a' `% O( ^% Z( i: M
                2 b# m  }  J5 D' ~& ~9 f# `1 r9 Y
解决方案:- L0 i3 S7 Z% }/ W. L# @
               
; W8 b0 P) R$ q% N; l/ n2 n6 E4 l) `2 \& ^( _% \

# \# H1 P% x4 ~6 L* M                我刚刚使用雄辩的查询构建器创建了用于处理MariaDB动态列的软件包。, z, |$ ]( I; d2 d! R
要安装软件包,请运行以下命令:
$ x' Y% O5 j* q: S" }3 X  k& jcomposer require halalsoft/laravel-dynamic-column1 R7 A% t  Q# |, ^, `
您可以通过添加HasDynamicColumn特征来开始使用包,并将其Dynamic用作对模型的属性强制转换。$ Q2 ~) }( z/ k9 @
一个例子:
: N( T, [7 g7 l9 Z5 p8 Yuse Illuminate\Database\Eloquent\Model;7 q7 t' ~+ Y" z: d  x% M4 {
use Halalsoft\LaravelDynamicColumn\Dynamic;
" O9 C# Z  h0 A  ?7 Tuse Halalsoft\LaravelDynamicColumn\HasDynamicColumn;4 L+ v! d( I) D9 F
class MyModel extends Model  T1 I: p; w2 n7 a, {! v% Y
{
* e5 F* i  E: a9 [! G$ ]& O    use HasDynamicColumn;
+ q( i7 f9 B* i4 W# k5 I; R! R    protected $casts) W; n4 U/ k: z& m2 e  e$ a: g/ n
        = [4 k, _2 ^. p9 A, \* c
            'the_column' => Dynamic::class,: j! b, Z5 x  A% `1 P; [# ^
        ];  ]6 s" z' |& f1 T& j" l
}
5 n; S$ a7 x9 q$ l/ W/ T% M* j现在,您可以使用雄辩的或查询生成器使用动态列(如json列):
: X" S* p' u8 |7 j6 J$modelData = MyModel::find(1);
6 p, k! ?$ g: N$columnData = $modelData->the_column;
& T% |. ?) h, Q/ |- @$columnData['data1'] = 'value';
0 w; I1 C8 ^- A: z, k6 _2 r/ K4 E5 L& a$columnData['data2'] = 'value2';  O3 c) X' o5 J# [4 Y
, A( {: }, e1 A& l
$modelData->the_column = $columnData;
9 z( w5 e* v2 }, q# c/ E$modelData->save();
9 s$ D1 J2 k( h4 c$ {您也可以将数据字段创建为数组8 r$ F: K7 j, u2 e1 I/ m! b
$newData = MyModel::create([$ E' B: b7 Y' G$ d; l$ P  t/ A
    'other_column' => 'this just another column data',  ^" q3 S! O2 F% ]/ F0 U
    'the_column' => ['data1'=>'value1','data2'=>'value2']
9 c" S" J3 D% Q; c0 T5 s& q) h]);
0 q( w6 e9 K9 N) B& [要更新您使用的json字段/键,可以->在调用update方法时使用运算符:9 c5 o5 V! a4 H. J6 K% q: `. S2 O
$page->update(['content->data1' => 'value1new']);2 H5 {3 A0 E+ J8 k1 f6 g, K- X9 `
或者您仍然可以使用常规数组更新整个列:
. K* K8 c9 b5 N9 y) h% O# d1 a$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);# s' \& A  d4 m  o6 J+ L0 D
可以使用作为阵列设置其他方法等updateOrCreate(),firstOrCreate()等。' a) g4 h) p4 W. ^1 O, u  @* L2 Y
该软件包还支持使用以下内容的查询构建器:9 p) J: L+ q3 N8 ^4 I* Z
Model::query()->where('the_column->data1', 'value1')->first();
3 U* h. O* c* |- x" g0 I+ ~. T  L这个软件包仍然是新的,如果有任何问题或请求,请转到github问题
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则