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