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

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

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

ClientController(尝试 1)

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

ClientController(尝试 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');
    }
}

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

More on mass assignement

编辑: 试试这个

路线:

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

抱歉,您的关系有误。而且你正在使用

 $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
]);

问题已解决

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

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