如何在 Laravel 5.2 中自动填充外键列值


How to auto fill foreign key column value in Laravel 5.2?

我正在研究 laravel 5.2,也是 laravel 的初学者。我在数据库中有usersclients表。 user客户端表的字段存储id column(primary key) of users table的值。即,一个用户有多个客户端,一个客户端属于一个用户。现在来找问题。当我要插入登录用户的新客户端时,出现错误。没有任何错误消息。我搜索并了解到,也许这是因为外键列名称是user,而不是user_id。所以我将我的客户端模型从 return $this->belongsTo('App'User'); 更新为 return $this->belongsTo('App'User', 'user'); .但还是失败了。如果有人知道答案,将不胜感激。这是我的代码。

客户端控制器(尝试 1)

$request->user()->clients()->create([
    'user' => $request->user()->id,
    'email' => $request->email,
    'age' => $request->age
]);

客户端控制器(尝试 2)

$request->user()->clients()->create([
    'email' => $request->email,
    'age' => $request->age
]);

客户端模型

namespace App;
use Illuminate'Database'Eloquent'Model;
use App'Ak'Scopes'AgeScope;
class Client extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(new AgeScope);
    }
    public function user()
    {
        return $this->belongsTo('App'User', 'user');
    }
}

用户模型

namespace App;
use Illuminate'Foundation'Auth'User as Authenticatable;
class User extends Authenticatable
{
    protected $fillable = [
        'name', 'email', 'password', 'country'
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];
    protected  $date = ['deleted_at'];
    public function client()
    {
        return $this->hasMany('App'Client', 'user');
    }
}

对不起,你们的关系是错误的。 此外,您正在使用

 $request->user()->clients()

而不是

  $request->user()->client() 

你们关系中的客户是单一的。客户端函数体应该是

  return $this->hasMany('App'Client', 'user');

并在您的客户端模型中添加

 $fillable = ['email', 'age', 'user'];

并将客户端模型中的用户函数更改为

public function user()
{
    return $this->belongsTo('App'User', 'user');
}

ORM应该是这样的

$request->user()->client()->create([
   'user' => $request->user()->id,
   'email' => $request->email,
   'age' => $request->age
]);

尝试将protected $fillable = ['email', 'age'];添加到客户端模型。

有关批量分配的更多信息

编辑:试试这个

路线:

Route::post('user/{user}/client', 'YourController@store');

控制器:

public function store(Request $request, User, $user){
    $user->client()->create([
       'user' => $request->user()->id,
       'email' => $request->email,
       'age' => $request->age
    ]);
}

问题已解决

问题解决了,因为我必须在客户端模式下编写public $timestamps = false;。之后,我不需要手动插入user值。因为 laravel 自己正在执行该任务,因为我在用户和客户端模型关系中写入了外键。即手动return $this->hasMany('App'Client', 'user')return $this->belongsTo('App'User', 'user')

我不明白我应该为拉拉维尔的这个功能做些什么。我应该哭还是笑?