Laravel 上的数据透视表有问题

Posted

技术标签:

【中文标题】Laravel 上的数据透视表有问题【英文标题】:Having a problem with a pivot table on Laravel 【发布时间】:2019-07-04 01:19:27 【问题描述】:

我有一个包含两个数据透视表的表单。其中一个工作得很好,但我似乎无法让第二个工作,尽管它们非常相似。一个不起作用的是名为“照片”的图像表和名为“发布”的表单上传。我使用“photo_id”和“release_id”字段将数据透视表称为“photo_releases”。

DB Pivot Table

这里是发布模式

类发布扩展模型 公共功能照片() return $this->belongsToMany('App\Photo', 'photo_releases', 'release_id', 'photo_id');

和照片模式

类照片扩展模型 公共功能释放() return $this->belongsToMany('App\Release', 'photo_releases', 'photo_id', 'release_id');

和 ReleaseController

公共函数存储(ReleasesCreateRequest $request) $input = $request->all(); $user = Auth::user(); if ($file = $request->file('photo_01')) $file_name = preg_replace("/[^a-zA-Z0-9.]/", "", $file->getClientOriginalName()); $name = 时间()。 “照片_01”。 $文件名; $file->move('images', $name); $input['photo_01'] = $name; $照片 = 新照片(); $photo->url = $input['photo_01']; $照片->保存(); $release = Release::create($request->except('release_id')); dd($request->except('release_id'), $request->get('photo_id', []), $request->get('artiste_id', [])); $release->photos()->attach($request->get('photo_id', [])); $release->artistes()->attach($request->get('artiste_id', [])); 返回重定向('/admin06000/releases');

此函数中使用了两个数据透视表。使用

"$release->artistes()->attach($request->get('artiste_id', []));"

工作正常,但照片不正常。 url 被记录在正确的数据库中并且图像上传正常,但数据透视表没有被更新。如果有人能提供帮助,将不胜感激。

【问题讨论】:

我想我是通过这样做 $release->photos()->attach($photo->id);如果有人可以确认它会很漂亮。 不工作,你能解释一下什么不工作吗?我想帮忙,但到目前为止我不太确定问题出在哪里。 【参考方案1】:

如果你需要一些选择来改变关系,试试这个

 with('photos')

 with(['photos'=>function($query)$query->where(....)->get();])...

 use Image;
 use Illuminate\Support\Facades\Input;
 ...
 public function store(ReleasesCreateRequest $request)
 
             $input = $request->all();   
             $user = Auth::user();

             if ($file = $request->file('photo_01'))
             
                 $image= Input::file('photo_01');
                 $name = time().'photo_01'.'.'.$image->getClientOriginalExtension();
                 $path=public_path('/YourPath/'.$name);
                 Image::make($image->getRealPath())->save($path);


                 $photo = new Photo();
                 $photo->url = '/YourPath/'.$name;
                 $photo->save();
             

             $release = Release::create
             ([
              'release_field'=>$amount,
              'release_field2'=>$amount2,
               ....
             ]); 

             $release->with('photos')->with(artistes)->get();



         ```

【讨论】:

以上是关于Laravel 上的数据透视表有问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中数据透视表的访问关系

如何在同一资源LARAVEL中返回数据透视表的数据

Laravel 5.8 在数据透视表上保存一对多关系

如何创建数据透视表 laravel?

Laravel 多列上的多对多同步()

使用 VBA 根据下拉选择过滤多个数据透视表