Laravel

时间:2017-01-23 08:46:26

标签: php laravel laravel-5

我在用户和管理员之间创建了简单的消息系统。当用户报告我存储他的报告的某个项目时,管理员会为此报告添加“重播给用户”按钮。

我认为我搞砸了数据库表和关系,所以请帮助我理解这一点。

所以我的表reports包含列+示例数据(两个用户报告相同的项目)

report_id | user_id | item_id
    1          1        1
    1          2        1

此表包含用户(user_id)到给定项目(item_id)的报告。然后我有一个名为reports_messages的表,其中包含用户和管理员之间的列+重放示例

report_id | user_id | item_id | messages
    1          1         1       Report
    1        admin       1       answer from admin
    1          2         1       Report from other user
    1        admin       1       answer from admin to other user

这是我的ReportMessages型号

class ReportMessages extends Model
{
     protected $table = 'reports_messages';

     protected $fillable = [
         'report_id', 'user_id', 'messages', 'item_id'
     ];

     public function reports(){

         return $this->belongsTo('App\Report');
     }

     public function users()
     {
         return $this->hasOne('App\User', 'id', 'user_id');
     }  
}

在管理员控制器中,这是我显示给定item_id

的所有报告的方式
public function details( $item_id ){

    $flags = Item::find($item_id)->report->unique('user_id');
    return view('details', compact('flags'));
}

按钮重播给用户

<a href="{{URL::to('replays/' . collect($flags)->first()->item_id)}}">Replay To User</a>

路线

Route::get('details/{details}', 'FlagsController@details')->name('details');

问题:当我有2个用户报告相同的项目并且我点击重播到用户按钮时,无论我打开哪个用户,我都会收到两个用户的消息。

我知道问题我可能是按钮,因为我添加了collect($flags)->first()->item_id,这给了我项目ID而不是用户ID但是我无法弄清楚这里的关系以及当我点击重播给用户id =时1只加载他的消息。

更新:项目模型

public function report(){
    return $this->hasMany('App\Report', 'item_id','id');
} 

1 个答案:

答案 0 :(得分:1)

在您的控制器

public function details( $item_id ){

    $flags = Item::where('item_id',$item_id)->get();
    return view('details', compact('flags'));
}

在你看来

foreach($flags as $flag):
    <a href="{{URL::to('replays/' . $flag->item_id.'/'.$flag->user_id)}}">Replay To User</a>
endforeach;