2017-10-22 4 views
-1

データベースに2つのテーブルがあります。私の最初のテーブル、言葉で表:LARAVEL 5.5:最適な配列をデータベースに追加するには?

構造テーブル "言葉 ":

-------------- 
[id] | [word] 
-------------- 
[11] | [тоҷик] 
[12] | [ӯзбек] 
[13] | [падар] 
[14] | [модар] 
[15] | [китоб] 
[16] | [қалам] 
[17] | [ручка] 
-------------- 

第二に、テーブル、テーブルの記述と:

構造テーブル" 説明":

--------------------------------------- 
[id] | [word_id] | [description] 
--------------------------------------- 
[1] | [11]  | [Миллати давлати...] 
[2] | [12]  | [Ӯзбекистон давл...] 
[3] | [13]  | [Шахсе ки сарвар...] 
[4] | [14]  | [Инсоне мобошанд...] 
[5] | [15]  | [Китоб - ин пред...] 
[6] | [16]  | [Предмети барои ...] 
[7] | [17]  | [Предмет барои н...] 
--------------------------------------- 

アレイ内の記述ワードの例:

フィールドへ wordテーブルから配列のキーで単語識別子を追加することによって、 description表に、この説明を追加する方法
$array_words_description = array 
(
    'тоҷик' => 'Миллати давлати Ҷумҳурии Тоҷикистон. Забони давлати мазкур.', 
    'ӯзбек' => 'Ӯзбекистон давлати дар Осиёи маркази ҷойгиршуда. Забони давлатиашон забони ӯзбеки мебошад.', 
    'падар' => 'Шахсе ки сарвари оила мебошад ва оилаи худро бо меҳру муҳаббат ва бо хӯрду - хӯрок таъмин менамояд.', 
    'модар' => 'Инсоне мобошанд, ки мову шуморо ба дунё оварда ба воя мерасонанд. Бузургтарин шахс дар олам ин модар аст.', 
    'китоб' => 'Китоб - ин предмете, ки ба ҳамаи мо илму маърифатро, донишу сабақро меомӯзонад.', 
    'қалам' => 'Предмети барои нашитаҷот пешбинишуда.', 
    'ручка' => 'Предмет барои навистан пешбини шудааст. Бисёртар ин предметро донишомӯзандагон истифода мебаранд.', 
); 

答えて

4

あなたはこのような何かを行うことができます:それはうまくいく

foreach ($array_words_description as $word => $description) { 
    $word = Word::create(['word' => $word]); 
    $word->description()->create(['description' => $description]); 
} 

はあなたが$fillable配列に列名を追加し、Wordモデルでdescription関係を定義しますです。

しかし、私が代わりにクエリのN * 2番号作成の単語とその説明の両方のためにただ一つのテーブルを使用することをお勧めいたしますと、ちょうど1クエリでデータを挿入したい:おそらくそうしない

array_walk(&$array_words_description, function ($word, $description) { 
    return compact('word', 'description'); 
}); 

Word::insert($array_words_description); 
+0

+1ようにすることによって、あなたが望むものを達成することができます 自分の雄弁なモデルクラスで任意の関係を持っています。私のプロジェクトのためには、最初の方法が必要です。 SQLSTATE [HY000]:一般的なエラー:1364フィールド 'word'にデフォルト値がありません(SQL: 'words'(' updated_at'、 'created_at')の値に挿入します(2017-10-22 20:42:14、2017-10-22 20:42:14))'コードは 'word'フィールドを見つけることができません'$ fillable'で複数のフィールドを指定する方法 – John

+0

' Word'に 'word'を使う必要があります。モデルと 'Description'モデルの' description' –

+0

データベースに、説明から除外して追加したい単語がある場合はどうすればいいですか?フィールドには単語の重複を避けるためのインデックスが含まれています@Alex Mezenin – John

0

をあなたは答え@Alex Mezeninため、この

$word_id = DB::table('words')->insertGetId(['word' => $word]); 
DB::table('descriptions')->insert(['word_id' => $word_id, 'description' => $description]); 
+0

ニース。インデックスフィールドへのあなたのアプローチは何ですか?新しい単語を同じ配列に追加して配列の最後に移動すると、polyexのために重複してエラーが発生し、新しい単語が追加されません。 'updateOrInsert()'と 'insertGetId()'メソッドの助けを借りてこれを解決することは可能ですか? @ mirage_909 – John

関連する問題