Laravel для каждого в массив, как? - PullRequest
0 голосов
/ 28 июня 2018

это результат метода get цикла Foreach, использующего dd $ ($ value),

Вопросы: как мне преобразовать это внутри моего контроллера в массив и сохранить его в моей базе данных

Пример: [ Lead_id1 = Subjectid1, Lead_id2 = Subjectid1, Lead_id3 = Subjectid1 ] и так далее и так далее ..

Примечание: Lead_id и Subject_id оба FK там для значения должно быть целое число Не Строка

Контроллер:

public function store(Request $request)
{
    $value=$request->all();
    $subjects = $value['Subject_id'] ?? [];
    $leads = $value['Lead_id'] ?? [];
    $data = [];
     foreach ($subjects as $subject) {
     $data[] = array_combine($leads, array_fill(0, count($leads), $subject));

    $scores=new Score;
    $scores->Subject_id=$request->input('Subject_id');
    $scores->Lead_id=$request->input('Lead_id');
   dd($scores);
    $scores->save();
}

это результат enter image description hereenter image description here

Оценка модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Score extends Model
{
    protected $guarded = [
        'id',
        'Year_id',
        'Term_id',
        'Level_id',
        'Classes_id',
        'Subject_id',
        'Lead_id',
    ]; 
}

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Вы сказали, что Lead_id and Subject_id оба являются внешними ключами, тогда вы можете просто использовать отношение ManyToMany в laravel и сохранять данные соответственно

Модель

class Subject extends Model{
   public function leads(){
     return $this->belongsToMany(Lead::class, 'scores', 'Subject_id', 'Lead_id');
   }
}

Ведущая модель

class Lead extends Model{
   public function subjects(){
     return $this->belongsToMany(Subject::class, 'scores', 'Lead_id', 'Subject_id');
   }  
}

Вопросы: как мне преобразовать это внутри моего контроллера в массив и сохранить его в моей базе данных

foreach($data['Subject_id'] as $subjectId){
    $subject = Subject::find($subjectId);
    $leadids = $data['Lead_id'];
    $subject->leads()->attach($leadids);
}

Для получения подробной информации проверьте это https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

0 голосов
/ 28 июня 2018

Вы можете попробовать следующее:

public function store(Request $request)
{
    $value=$request->all();
    $subjects = $value['Subject_id'] ?? [];
    $leads = $value['Lead_id'] ?? [];
    $data = [];

    foreach ($subjects as $subject) {
        $data[] = array_combine($leads, array_fill(0, count($leads), $subject));
    }

    foreach ($data as $load => $subject) {
        $scores = new Score;
        $scores->Subject_id = $subject;
        $scores->Lead_id = $load;
        $scores->save();
        dd($scores);
    }  
}
0 голосов
/ 28 июня 2018

сначала преобразовать массив в строку json

json_encode($array);

перед сохранением в базе данных

0 голосов
/ 28 июня 2018

Вы можете попробовать -

$temp = [];
$subject = !empty($value['Subject_id'][0]) ? $value['Subject_id'][0] : null; // extract the subject id
// Loop through lead ids
foreach($value['Lead_id'] as $lead) {
    $temp[$lead] = $subject; // store subject id fro lead ids
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...