如何将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而不是像我那样的字符串。