LARAVEL 5.5: 如何优化向数据库中添加一个数组?
LARAVEL 5.5: How to optimally add an array to the database?
我的数据库中有 2 个 table。我的第一个table,table用词:
结构table“单词”:
--------------
[id] | [word]
--------------
[11] | [тоҷик]
[12] | [ӯзбек]
[13] | [падар]
[14] | [модар]
[15] | [китоб]
[16] | [қалам]
[17] | [ручка]
--------------
第二个 table,table 的描述:
结构table“描述”:
---------------------------------------
[id] | [word_id] | [description]
---------------------------------------
[1] | [11] | [Миллати давлати...]
[2] | [12] | [Ӯзбекистон давл...]
[3] | [13] | [Шахсе ки сарвар...]
[4] | [14] | [Инсоне мобошанд...]
[5] | [15] | [Китоб - ин пред...]
[6] | [16] | [Предмети барои ...]
[7] | [17] | [Предмет барои н...]
---------------------------------------
数组中的描述词示例:
$array_words_description = array
(
'тоҷик' => 'Миллати давлати Ҷумҳурии Тоҷикистон. Забони давлати мазкур.',
'ӯзбек' => 'Ӯзбекистон давлати дар Осиёи маркази ҷойгиршуда. Забони давлатиашон забони ӯзбеки мебошад.',
'падар' => 'Шахсе ки сарвари оила мебошад ва оилаи худро бо меҳру муҳаббат ва бо хӯрду - хӯрок таъмин менамояд.',
'модар' => 'Инсоне мобошанд, ки мову шуморо ба дунё оварда ба воя мерасонанд. Бузургтарин шахс дар олам ин модар аст.',
'китоб' => 'Китоб - ин предмете, ки ба ҳамаи мо илму маърифатро, донишу сабақро меомӯзонад.',
'қалам' => 'Предмети барои нашитаҷот пешбинишуда.',
'ручка' => 'Предмет барои навистан пешбини шудааст. Бисёртар ин предметро донишомӯзандагон истифода мебаранд.',
);
如何通过将数组键中的单词标识符从 word
table 添加到 word_id
来将此描述添加到 description
table领域。
你可以这样做:
foreach ($array_words_description as $word => $description) {
$word = Word::create(['word' => $word]);
$word->description()->create(['description' => $description]);
}
如果您在 $fillable
数组中添加列名称并在 Word
模型中定义 description
关系,那么它会起作用。
但我建议您只对单词及其描述使用一个 table,并仅使用一个查询插入数据,而不是创建 N*2 个查询:
array_walk(&$array_words_description, function ($word, $description) {
return compact('word', 'description');
});
Word::insert($array_words_description);
可能您的 eloquent 模型中没有任何关系 类
你可以通过这样做来实现你想要的
$word_id = DB::table('words')->insertGetId(['word' => $word]);
DB::table('descriptions')->insert(['word_id' => $word_id, 'description' => $description]);
我的数据库中有 2 个 table。我的第一个table,table用词:
结构table“单词”:
--------------
[id] | [word]
--------------
[11] | [тоҷик]
[12] | [ӯзбек]
[13] | [падар]
[14] | [модар]
[15] | [китоб]
[16] | [қалам]
[17] | [ручка]
--------------
第二个 table,table 的描述:
结构table“描述”:
---------------------------------------
[id] | [word_id] | [description]
---------------------------------------
[1] | [11] | [Миллати давлати...]
[2] | [12] | [Ӯзбекистон давл...]
[3] | [13] | [Шахсе ки сарвар...]
[4] | [14] | [Инсоне мобошанд...]
[5] | [15] | [Китоб - ин пред...]
[6] | [16] | [Предмети барои ...]
[7] | [17] | [Предмет барои н...]
---------------------------------------
数组中的描述词示例:
$array_words_description = array
(
'тоҷик' => 'Миллати давлати Ҷумҳурии Тоҷикистон. Забони давлати мазкур.',
'ӯзбек' => 'Ӯзбекистон давлати дар Осиёи маркази ҷойгиршуда. Забони давлатиашон забони ӯзбеки мебошад.',
'падар' => 'Шахсе ки сарвари оила мебошад ва оилаи худро бо меҳру муҳаббат ва бо хӯрду - хӯрок таъмин менамояд.',
'модар' => 'Инсоне мобошанд, ки мову шуморо ба дунё оварда ба воя мерасонанд. Бузургтарин шахс дар олам ин модар аст.',
'китоб' => 'Китоб - ин предмете, ки ба ҳамаи мо илму маърифатро, донишу сабақро меомӯзонад.',
'қалам' => 'Предмети барои нашитаҷот пешбинишуда.',
'ручка' => 'Предмет барои навистан пешбини шудааст. Бисёртар ин предметро донишомӯзандагон истифода мебаранд.',
);
如何通过将数组键中的单词标识符从 word
table 添加到 word_id
来将此描述添加到 description
table领域。
你可以这样做:
foreach ($array_words_description as $word => $description) {
$word = Word::create(['word' => $word]);
$word->description()->create(['description' => $description]);
}
如果您在 $fillable
数组中添加列名称并在 Word
模型中定义 description
关系,那么它会起作用。
但我建议您只对单词及其描述使用一个 table,并仅使用一个查询插入数据,而不是创建 N*2 个查询:
array_walk(&$array_words_description, function ($word, $description) {
return compact('word', 'description');
});
Word::insert($array_words_description);
可能您的 eloquent 模型中没有任何关系 类 你可以通过这样做来实现你想要的
$word_id = DB::table('words')->insertGetId(['word' => $word]);
DB::table('descriptions')->insert(['word_id' => $word_id, 'description' => $description]);