Laravel 如何获得其他用户为某个用户提交的推荐信

Laravel 如何获得其他用户为某个用户提交的推荐信,laravel,laravel-5,laravel-5.5,relationships,Laravel,Laravel 5,Laravel 5.5,Relationships,我在获取其他用户提交的所有证明文件以将其显示在相关用户(正在审核的用户)的用户配置文件上时遇到问题 有两张桌子。首先是用户表,其中包含id,姓名,电子邮件,照片,电话和标题。我有一个avis表,其中存储了带有id、profile\u id、user\u id和注释的推荐信。(user\u id获取提交表单的user的id,profile\u id获取接收证明的用户的id) 我试着像下面这样做,但不知道这是否是正确的方法。我不确定我的关系是否正确。我对拉雷维尔有点陌生。但无论如何,这就是我迄今为止

我在获取其他用户提交的所有证明文件以将其显示在相关用户(正在审核的用户)的用户配置文件上时遇到问题

有两张桌子。首先是
用户
表,其中包含
id
姓名
电子邮件
照片
电话
标题
。我有一个
avis
表,其中存储了带有
id
profile\u id
user\u id
注释的推荐信。(
user\u id
获取提交表单的
user
的id,
profile\u id
获取接收证明的
用户的
id

我试着像下面这样做,但不知道这是否是正确的方法。我不确定我的关系是否正确。我对拉雷维尔有点陌生。但无论如何,这就是我迄今为止所尝试的:

这是
用户
型号:

public function avis()
{
    return $this->hasMany('App\Avis', 'profile_id', 'user_id');
}
protected $fillable = ['comment','profile_id'];

public function user() 
{
    return $this->belongsTo('App\User');
}
这是我的
Avis
型号:

public function avis()
{
    return $this->hasMany('App\Avis', 'profile_id', 'user_id');
}
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>
public function store(AvisCreateRequest $request)
{
    $avis = new Avis;
    $id = Auth::user()->id;

    $avis->comment = $request->comment;
    $avis->profile_id = $request->profile_id;
    $avis->user_id = $id;

    //dd($avis);

    $avis->save();

    return back()->with('success_message', 'Votre Avis a ete envoyez avec succes!');
}
有人能告诉我我做错了什么吗

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

嘿,伙计,一定是这样,“profile\u id”和“user\u id”都是外键id'是用户表中的本地键,如果调用avis(),它将使用户表的id与avis表的id匹配profile_id

如果您想查询两种类型的
avis
,您需要在
用户
模型上建立两种不同的关系,
用户
写的和他收到的

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

如果需要,还可以在
用户上使用关系加载
——这样就不必向视图传递多个变量。它看起来像这样:

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

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

    return view('Users', compact('avis', '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
@if(计数($user->receivedAvis)>0)
@foreach($user->receivedAvis as$avis)
@endforeach
@恩迪夫

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

嘿,伙计,它正在工作。非常感谢。我还有一个问题。如何防止用户向同一用户配置文件发送两份推荐信,以及如何防止用户向自己发送推荐信..在返回推荐信表单视图的控制器操作中,如果(\Auth::user()->writenavis()->where('profile_id',$profileId)->count(),可以执行如下检查
>0 | |$profileId==\Auth::user()->id){return response()->back();//或者做任何你想做的事}
。所以我应该在Avis控制器中添加这段代码,在那里我存储表单数据。它应该说
return redirect()->back()
。对不起,我犯了一个小错误。这是你从其他框架或编程语言学习Laravel时必须学习的最重要的一课:当你自己觉得某件事情很难实现或很乏味时,那么你很可能是做错了。因为Laravel方法通常很短,同时也很有说服力(因此ORM系统的名称为eloquent)