如何为其他用户编写的用户提交提交的推荐书

时间:2018-04-26 22:01:40

标签: laravel laravel-5 laravel-5.5 relationships

我有一个问题,就是让其他用户提交的所有推荐书都显示在相关用户的用户个人资料上(正在审核的用户)。

有两张桌子。首先是users表格idnameemailphotophonetitle。我有一个avis表,其中存储了idprofile_iduser_idcomment的推荐。 (user_id获取提交表单的User的ID,profile_id获取正在接收推荐的id的{​​{1}}。

我试着像下面那样做,并且不知道它是否是正确的方法。我不确定我的关系是否合适。我对Laravel来说很新。但无论如何这是我到目前为止所尝试的:

这是User型号:

User

这是我的public function avis() { return $this->hasMany('App\Avis', 'profile_id', 'user_id'); } 模型:

Avis

这是我在显示配置文件和推荐列表的控制器中所做的:

protected $fillable = ['comment','profile_id'];

public function user() 
{
    return $this->belongsTo('App\User');
}

这是我用来撰写推荐书的表格:

public function Details($id)
{
    $detail = User::with(['area.town', 'services'])->find($id);

    $avis = User::whereHas('avis', function ($query) use ($id) {
            $query->where('profile_id', '=', $id);
        })
        ->limit(3)
        ->get();

    //dd($avis);

    return view('Users', compact('avis', 'detail'));
}

这是用于存储证言的控制器方法:

<div id="avisForm"> 
    <p class="feedback_message">We are here to make sure you are sastified and your transactions are safe. We do appreciate and will respond quickly to any feedback from you.</p>

    {!! Form::open(['route' => 'avis.store']) !!}

    <input type="hidden" name="profile_id" value="{{ $detail>id }}">
    {!! Form::textarea('comment', null, ['placeholder' => 'Message', 'required' => 'required']) !!}
    {!! Form::submit('Envoyez', ['class' => 'formBtn','style' => 'margin-top:10px']) !!}

    {!! Form::close() !!}
</div>

有人可以指出我的错误吗?

2 个答案:

答案 0 :(得分:2)

public function avis()
{
    return $this->hasMany('App\Avis', 'profile_id', 'id');
}
嘿,男人,一定是这样的,&#39; profile_id&#39;和&#39; user_id&#39;都是外键。 &#39; ID&#39;是用户表中的本地密钥,如果您调用avis(),它将匹配用户表 id avis表 PROFILE_ID

答案 1 :(得分:2)

如果您希望能够查询User的两种类型,Avis已写入的内容以及他收到的内容,您需要在User模型上设置两种不同的关系。

public function receivedAvis()
{
    return $this->hasMany('App\Avis', 'profile_id', 'id');
}

public function writtenAvis()
{
    return $this->hasMany('App\Avis', 'user_id', 'id');
}

然后,您可以查询收到的推荐信,如下所示:

public function Details($id)
{
    $user = User::with(['area.town', 'services'])->find($id);

    $avis = $user->receivedAvis()
        ->limit(3)
        ->get();

    return view('Users', compact('avis', 'user'));
}

如果需要,您还可以在User上使用关系加载 - 那么您就不必将多个变量传递给您的视图。它看起来像这样:

public function Details($id)
{
    $user = User::with(['area.town', 'services'])->find($id);

    $user ->load(['receivedAvis' => function ($query) {
        $query->limit(3);
    }]);

    return view('Users', compact('user'));
}

然后,您可以通过$user变量

访问视图中的推荐
@if(count($user->receivedAvis) > 0)
    <div id="testimonials">
        @foreach($user->receivedAvis as $avis)
            <!-- place the code to display your testimonials here -->
        @endforeach
    </div>
@endif

请注意,我将您的$detail变量重命名为$user,因为最好使用反映变量类型的变量名称。