如何将users表中的两个外键存储到Laravel 5.4中的第二个表中?
我被困住了,因为我是拉雷维尔的新手 我有一个用户表和消息表,这是我的消息表模式如何将users表中的两个外键存储到Laravel 5.4中的第二个表中?,laravel,eloquent,laravel-5.4,Laravel,Eloquent,Laravel 5.4,我被困住了,因为我是拉雷维尔的新手 我有一个用户表和消息表,这是我的消息表模式 Schema::create('messages', function (Blueprint $table) { $table->increments('id'); $table->integer('sender')->unsigned(); $table->foreign('sender')->references('id')->o
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');
$table->integer('sender')->unsigned();
$table->foreign('sender')->references('id')->on('users')->onDelete('cascade');
$table->integer('reciever')->unsigned();
$table->foreign('reciever')->references('id')->on('users')->onDelete('cascade');
$table->string('msg');
$table->string('attachment')->nullable();
$table->string('seen')->default(0);
$table->integer('deleted')->default(0);
$table->timestamps();
});
这里的sender
和receiver
都是用户表的外键
在我的应用程序中,我可以从Auth::user()访问发送者
id,还可以访问接收者
id。。如何发布关系和存储消息?
我已经尝试了很多方法,请帮助我。多谢各位
我想我的问题在于这段关系。请看一看,并建议我正确的方法
用户模型
public function sender()
{
return $this->hasMany('App\Message', 'sender');
}
public function reciever()
{
return $this->hasMany('App\Message', 'reciever');
}
消息模型
public function sender()
{
return $this->belongsTo('App\User', 'sender');
}
public function reciever()
{
return $this->belongsTo('App\User', 'reciever');
}
为什么不存储bot发送方和接收方ID,当需要检索数据时,可以使用内部join语句。 下面是我如何在自己的应用程序上实现这一点的示例
$message->user_id = $userid;
$message->message = $msg;
$message->recipient = "user";
$message->save();
检索时
$msgs = Message::join('users', 'messages.user_id', '=', 'users.id')
->select('messages.*', 'users.name', 'users.image')
->where('messages.user_id',$id)
->get();
在我的例子中,我只存储一个id,另一个是字符串,因为消息总是在管理员和用户之间。我不需要管理员id,为什么不存储bot发送者和接收者id?当需要检索数据时,可以使用内部join语句。 下面是我如何在自己的应用程序上实现这一点的示例
$message->user_id = $userid;
$message->message = $msg;
$message->recipient = "user";
$message->save();
检索时
$msgs = Message::join('users', 'messages.user_id', '=', 'users.id')
->select('messages.*', 'users.name', 'users.image')
->where('messages.user_id',$id)
->get();
在我的情况下,我只存储一个id,另一个是字符串,因为消息总是在管理员和用户之间,我不需要管理员id,您可以这样做:
// Create message model instance
$message = new App\Message(['msg' => 'Something test', ...]);
// Retrieve the related user
$user = App\User::find(1);
// Call the method you defined in user model
$user->sender()->save($message);
你可以这样做:
// Create message model instance
$message = new App\Message(['msg' => 'Something test', ...]);
// Retrieve the related user
$user = App\User::find(1);
// Call the method you defined in user model
$user->sender()->save($message);
您必须在模型中定义关系。谢谢你的评论,是的,我定义了,我的关系定义似乎不正确,这就是为什么问。然后请显示你的关系定义的代码。我猜不出为什么你的关系不起作用,你必须在模型中定义关系。谢谢你的评论,是的,我定义了,我的关系定义似乎不正确,这就是为什么问。然后请显示你的关系定义的代码。我猜不出为什么你们的关系不起作用。如果你不介意的话,我有个问题。我在消息模型中,但即使我必须像您所说的那样在实例中创建$message=newmessage($input);我不能理解。你能给我解释一下或者给我指一个博客,我可以在那里读到它吗?谢谢。我不明白你说的话。你的意思是你做了消息模型中的逻辑?谢谢,它可以工作。如果你不介意的话,我有个问题。我在消息模型中,但即使我必须像您所说的那样在实例中创建$message=newmessage($input);我不能理解。你能给我解释一下或者给我指一个博客,我可以在那里读到它吗?谢谢。我不明白你说的话。您的意思是您执行了邮件模型中的逻辑?添加收件人ID而不是像我那样的字符串。添加收件人ID而不是像我那样的字符串。