代码之家  ›  专栏  ›  技术社区  ›  Chris Muench

Laravel雄辩的一-->多关系分配父

  •  0
  • Chris Muench  · 技术社区  · 6 年前

    用户模型有许多朋友主键id

    <?php
    
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    
    class User extends Model
    {
            public function friends()
            {
                return $this->hasMany(Friend::class);
            }
    }
    

    朋友模型;属于用户。外键用户id。

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Friend extends Model
    {
        protected $guarded = ['id'];
    
        //Make sure birthday is always in right format  
        public function setBirthdayAttribute($value)
        {
            //Put in mysql format
        $this->attributes['birthday'] = date("Y-m-d",strtotime($value));
        }
    
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    }
    

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Friend  $friend
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Friend $friend)
    {
            $friend->fill($request->all());
            //Assign user to logged in user...does NOT work; things it is a column
            $friend->user = \Auth::user();
            $friend->save();
            return redirect(action('FriendsController@index'));
    }
    

    保存时的错误消息:

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user' in 'field list' (SQL: update `friends` set `last_name` = Muench!!, `updated_at` = 2018-09-28 13:26:01, `user` = {"id":1,"name":"Chris","email":"me@chrismuench.com","email_verified_at":null,"created_at":"2018-09-27 19:52:03","updated_at":"2018-09-27 19:52:03","braintree_id":null,"paypal_email":null,"card_brand":null,"card_last_four":null,"trial_ends_at":null} where `id` = 8)
    

    有什么原因我不能给用户分配user对象吗?我知道我可以设置user\u id列,但是如果我可以传递对象,那就太好了。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Marcin Nabiałek    6 年前

    mutator

    public function setUserAttribute($user)
    {
       $this->attributes['user_id'] = $user->id;
    }
    

    给你的 Friend 对象。

    然而,这可能是相当危险的,因为关系名称也是 user ,因此最好使用其他名称(例如 friend_user 然后是方法名 setFriendUserAttribute associate 方法:

    $friend->user()->associate(\Auth::user());