簡體   English   中英

如何在Laravel 5.2中自動填充外鍵列值?

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

我正在研究laravel 5.2,也是laravel的初學者。 我在數據庫中有usersclients表。 client表的user字段存儲id column(primary key) of users tableid column(primary key) of users table的值。 即,一個用戶擁有許多客戶端,一個客戶端屬於一個用戶。 現在來問題了。 當我要插入登錄用戶的新客戶端時,我收到錯誤。 沒有任何錯誤消息。 我搜索並發現可能是因為外鍵列名是user ,而不是user_id 所以我從return $this->belongsTo('App\\User');更新了我的客戶端模型return $this->belongsTo('App\\User'); return $this->belongsTo('App\\User', 'user'); 但仍然失敗了。 如果有人知道答案,那么答案將不勝感激。 這是我的代碼。

ClientController(試一試)

$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');
    }
}

抱歉你的關系錯了。 而且你正在使用

 $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正在執行該任務,因為我在User和Client Models關系中編寫了外鍵。 return $this->hasMany('App\\Client', 'user')並手動return $this->belongsTo('App\\User', 'user')

我無法理解我應該為這個laravel功能做些什么。 我應該哭還是笑?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM