[英]Laravel user_id in Many-To-Many relationships
首先,抱歉我的英語不好。
我有三個簡單的模型:
用戶
class User extends Authenticatable
{
protected $fillable = [
'first_name', 'last_name'
];
public function tickets()
{
return $this->hasMany(Ticket::class);
}
}
票
class Ticket extends Model
{
protected $fillable = ['user_id', 'title'];
public function user()
{
return $this->belongsTo(User::class);
}
public function replies()
{
return $this->hasMany(TicketReply::class);
}
}
TicketReply
class TicketReply extends Model
{
protected $fillable = ['user_id', 'ticket_id', 'text'];
public function user()
{
return $this->belongsTo(User::class);
}
public function ticket()
{
return $this->belongsTo(Ticket::class);
}
}
因此,要創建新票證,需要創建票證和答復。
我在TicketController中使用以下方法來創建新票證:
public function createNewTicket(Request $request)
{
$ticket = $request->user()->tickets()->create($request->all());
$replies = $ticket->replies()->create($request->all()); // Error occurs in this line
}
但它返回此錯誤:
SQLSTATE [23502]:不為null違反:7錯誤:“ user_id”列中的null值違反了non-null約束...
問題是 :
為什么Laravel不識別TicketReply的所有者?
我希望我已經解釋清楚了。
PS:
注意$request
數據是這樣的:
array:2 [▼
"title" => "My Ticket Title" // `title` field of Ticket Model
"text" => "Ticket Text Goes Here" // `text` field of TicketReply Model
]
我認為您無法在創建重播票證時設置用戶ID,因為該模型只有一個foregin密鑰,您可以像這樣進行解決:
$replies = $ticket->replies()->create($request->all() + ['user_id' => $request->user()->id]);
我們認為正確的解決方案是手動指定用戶ID和票證。 祝好運!
Laravel不知道。 它只知道票證中的user_id是其中一個字段,但不知道您要使用它。 同樣看起來,具有這種關系的代碼不是100%正確的設計。
您想要的是:
user has many tickets
user has many ticketreplies
ticket belongs to user
ticket has many ticketreplies
ticketreply belongs to ticket
ticketreply has many users
然后像您一樣創建票證並
創建票證回復如下:
$fields = $request->all();
$fields['user_id'] = $request->user()->id;
$ticket->replies()->create($fields);
還有其他方法,即
$fields = $request->all();
$fields->user_id = $request->user()->id;
$fields->ticket_id = $ticket->id;
$ticketReply = \App\TicketReply::create($fields);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.