Php 如何将查询生成器转换为雄辩的

Php 如何将查询生成器转换为雄辩的,php,laravel,eloquent,Php,Laravel,Eloquent,我一直在想如何实现一个匹配的系统,但却陷入了困境。 我已经设法在一个控制器中构建了一个查询,它做的事情与我希望它做的完全相同,但是我想将它转换为一个雄辩的模型,因为图像被破坏了,并且还可以访问模型中的一些函数 下面是我希望转换的控制器中的查询生成器(如果可能的话)-我正在检查用户是否彼此“喜欢”(类似于Tinder): 下面是申请者模型,我在其中将逻辑提取到一个可用的特征中 App\Models\Applicant class Applicant extends Authenticatable

我一直在想如何实现一个匹配的系统,但却陷入了困境。 我已经设法在一个控制器中构建了一个查询,它做的事情与我希望它做的完全相同,但是我想将它转换为一个雄辩的模型,因为图像被破坏了,并且还可以访问模型中的一些函数

下面是我希望转换的控制器中的查询生成器(如果可能的话)-我正在检查用户是否彼此“喜欢”(类似于Tinder):

下面是申请者模型,我在其中将逻辑提取到一个可用的特征中

App\Models\Applicant

class Applicant extends Authenticatable
{
    use Notifiable, LikeableEmployer, MatchableEmployer;

    //

    public function getAvatarAttribute($value)
    {
        return asset($value ?: '/images/default-avatar.jpeg');
    }
}

最后,这里是应该放置匹配逻辑的地方


namespace App\Traits;

use App\Traits\LikeableApplicant;
use App\Traits\LikeableEmployer;

trait MatchableEmployer
{
    use LikeableApplicant, LikeableEmployer;

    public function matchedEmployers()
    {
        //
    }
}


您需要创建一个存储匹配项的表。让我们以下面的例子为例

关系
表:id |从|到
,如果我们有一对,则是匹配的。例如:

id | from | to
1  | 1    | 2
2  | 2    | 1
现在创建
关系
模型

class Relationship extends Model
{
    public static function getMatch($user_id)
    {
        return self::leftJoin('relationship reverse', 'relationship.to', '=', 'reverse.from')->where('relationship.from', 'reverse.to')->where('relationship.from', $user_id)->get();
    }
}

现在您只需调用
User::getMatch('any_User_id')

首先,为您在此查询中使用的每个表创建模型,然后添加以下关系

在类应用程序模型中 雇主模式 最终在您的匹配中EmployerController
尝试上面的代码,我将您给定的代码转换为ORM,但我认为您实现的逻辑是错误的。如果有任何不好的地方,请回复我,我会帮助你。谢谢你的建议,我想我必须更新我的问题,因为我正在使用两个防护身份验证和透视表。我没有提到我已经有两个具有两个不同用户表的身份验证防护,并且在所有设置都正确的情况下也使用透视表,但我将更新我的问题,谢谢您的时间!
id | from | to
1  | 1    | 2
2  | 2    | 1
class Relationship extends Model
{
    public static function getMatch($user_id)
    {
        return self::leftJoin('relationship reverse', 'relationship.to', '=', 'reverse.from')->where('relationship.from', 'reverse.to')->where('relationship.from', $user_id)->get();
    }
}
public function employer(){
     return $this->belongsTo('App\Employer','liked_employer_id','id');
  }
 public function likes(){
     return $this->hasMany('App\EmployerLike','employer_id','id');
  }
public function index()
{
    $matches = ApplicantLike::with('employer','employer.likes')
     ->has('employer')
     ->has('employer.likes')
     ->get();

     // dd($matches); // try with this first
    return view('applicant.employers.matched', compact('matches'));
}