如何制作最短的代码?

时间:2017-02-18 13:03:30

标签: laravel laravel-5 eloquent laravel-5.4

我使用以下代码将多数组插入数据库:

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");
    }

2 个答案:

答案 0 :(得分:3)

如果您在Announcement模型关系中定义如下:

public function categories() 
{
   return $this->belongsToMany(AnnouncementCategory::class);
}
你可以这样做:

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

修改

我看到您更新了问题并添加了categories关系。但是看一下你的代码,AnnounceCategory就是数据透视表,所以你应该使用belongsToMany而不是hasMany

答案 1 :(得分:1)

如果请求与列匹配,您可以在一行中执行此操作:

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

然后在AnnouncementCategory模型中,确保声明protected $fillable数组,指定哪个字段可以填充。