如何将users表中的两个外键存储到Laravel 5.4中的第二个表中?

时间:2017-07-26 09:53:56

标签: laravel eloquent laravel-5.4

我很困难,因为我是Laravel的新手。

我有一个用户表和消息表,这是我的消息表模式

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();
    });

此处senderreciever是用户表的两个foriegn键。

在我的应用程序中,我可以访问Auth :: user()中的sender id,并且还可以访问reciever 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');
}

2 个答案:

答案 0 :(得分:2)

你可以这样做:

// 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);

答案 1 :(得分:1)

为什么不存储bot发送方和接收方ID,当需要检索数据时,可以使用内部连接语句。 这是我在自己的应用程序中如何做到这一点的一个例子

$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

相关问题