dqbr37828 2016-12-16 12:48
浏览 72
已采纳

插入两个一对一关系中的表格

I have 2 tables that are in one to one relationship:

tours :

id|title|content

featured_image:

id|tour_id|name|path

My models FeaturedImage.php:

class FeaturedImage extends Model
{
public function tour()
 {
    return $this->hasOne('App\Tour');
 }
}

Tour.php

class Tour extends Model
{
  public function featuredimage()
  {
    return $this->belongsTo('App\FeaturedImage');
  }
}

I want to save tour_id in featured_image table when tour is created. I'm using same form to fill tours table and to upload featured_image.

This is my store method looks like:

    public function store(Request $request)
{

    //validate the date
    $this->validate($request, [
            'title'    => 'required|max:255',
            'content'  => 'required'
        ]);
    //store the date
    $tour = new Tour;

    $tour->title   = $request->title;
    $tour->content = $request->trip_code;

    $tour->save();

    $featured_image= new FeaturedImage;
    // save featured_image
    if($request->hasFile('featured_image')){
        $image = $request->file('featured_image');
        $filename = $image->getClientOriginalName();
        $location = public_path('images/featured_image/'.$filename);
        Image::make($image)->resize(800, 600)->save($location);

     $featured_image->path= $location;
     $featured_image->tour()->associate($tour);
     $featured_image->save();
    }

    //redirect to 
    Session::flash('success','Tour is successfully created !');
    return redirect()->route('tours.show',$tour->id);
}

I'm successful to save data into tours table but unable to save in featured_image table. I 'm getting this error:

Call to undefined method Illuminate\Database\Query\Builder::associate()

I would be thankful if anyone can help me out.

  • 写回答

2条回答 默认 最新

  • dst67283 2016-12-16 13:19
    关注

    You can user Mass Assignment to create your entries into DB like this:

    $this->validate(request()->all(), [
        'title'    => 'required|max:255',
        'content'  => 'required'
    ]);
    
    $tour_inputs = array_only(
        $tour_inputs.
        [
            'title',
            'content',
        ]
    );
    
    $tour = Tour::create($tour_inputs);
    
    if($request->hasFile('featured_image')) {
        $image = $request->file('featured_image');
        $filename = $image->getClientOriginalName();
        $location = public_path('images/featured_image/'.$filename);
        Image::make($image)->resize(800, 600)->save($location);
    
        $featuredImage = $tour->featuredImage()->save(new FeaturedImage([
            'name' => $filename,
            'path' => $location,
        ]));
    }
    

    Remember to define the $fillables inside your models, your models should look like this,

    do check your relations, that you've made in the models, according to me they aren't correct:

    class Tour extends Model
    {
        protected $fillables = [
            'title',
            'content',
        ];
    
        public function featuredImage()
        {
          return $this->hasOne('App\FeaturedImage');
        }
    }
    
    
    class FeaturedImage extends Model
    {
        protected $fillables = [
            'name',
            'path',
            'tour_id',
        ];
    
        public function tour()
        {
          return $this->belongsTo('App\Tour');
        }
    }
    

    Hope this helps!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器