簡體   English   中英

Laravel user_id在多對多關系中

[英]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.

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