2017-02-18 2 views
0

Я использую следующий код для вставки несколько массива в базу данных:Как сделать кратчайший код?

foreach($request->category as $k => $v){ 
       $category[] = array(
        "category_id" => $v, 
        "announcement_id" => $announcement->id 
       ); 
      } 

      AnnouncementCategory::insert($category); 

Таким образом, входные данные POST массив $request->category. мне нужно рефакторинг этого кода

Я попробовал этот код:

$announcement->categories()->attach($request->category); 

В модели Announcement у меня есть:

public function categories() 
    { 
     return $this->hasMany("App\AnnouncementCategory", "announcement_id", "id"); 
    } 

ответ

3

Если определить в вашей Announcement модели отношений, как это:

public function categories() 
{ 
    return $this->belongsToMany(AnnouncementCategory::class); 
} 

вы можете сделать это следующим образом:

$announcement->categories()->attach($request->category); 

EDIT

Я вижу, что вы обновили свой вопрос и добавлено categories отношений. Но, глядя на свой код, AnnounceCategory достаточно сводной таблицы, поэтому вы должны использовать belongsToMany как я показал вместо hasMany

+0

Должно быть hasMany, потому что я работаю с моделью 'Announcement', где есть« категории ». Он не работает – Darama

+0

Звонок на неопределенный метод Illuminate \ Database \ Query \ Builder :: attach() – Darama

+0

@Darama У вас есть это отношения hp, которое определяется как 'ownToMany', как я показал в своем коде? –

1

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

AnnouncementCategory::insert($request->all()); 

Тогда в вашей модели AnnouncementCategory, сделайте su re вы объявляете массив protected $fillable, где вы указываете, какое поле может быть заполнено.

+0

Но мне нужно установить в поле 'announcement_id' поле для каждой категории – Darama

+0

нормально, то вы можете создать массив так же, как вы делали в своем посте, я не вижу проблемы – meda

Смежные вопросы