如何将此SQL语句转换为laravel代码?

时间:2019-04-18 14:45:40

标签: laravel eloquent

所以我有两个表Animals和Adoptions

动物表包含[animalID,名称,DOB]

收养拥有[id,animalID,userID,已批准]

我需要写一个与两个表中的animalID匹配的语句,并返回批准为0的动物的名称和DOB。

我以前几乎没有使用过mySQL或Laravel的经验,所以我的假设是SQL查询看起来像这样:

SELECT animalName, DOB
FROM animal
INNER JOIN
Adoption ON adoption.animalID = animal.animalID
WHERE 
Adoption.approved = 0

目前,我要退还桌子上的所有动物。因此,我需要添加联接并进行检查,以查看采用表中的animalID是否值为0

public function available  ()
{
    //JOIN ANIMAL AND ADOPTION TABLES
    //RETURN ALL ANIMALS WHERE APPROVED = 0


    $animalQuery = Animal::all();



    return view('/available', array('animals'=>$animalQuery));
}

3 个答案:

答案 0 :(得分:1)

public function available  ()
{
    //JOIN ANIMAL AND ADOPTION TABLES
    //RETURN ALL ANIMALS WHERE APPROVED = 0


    $animalQuery = Animal::select('animals.id','animals.name', 'animals.DOB')
        ->join('adoptions', 'adoptions.animalid', '=', 'animals.id')
        ->where('adoptions.approved', 0)
        ->get();



    return view('/available', array('animals'=>$animalQuery));
}

这是对我有用的答案

答案 1 :(得分:0)

首先,您将需要两个模型。动物模型和收养模型。 Laravel使用模型来访问数据库表。

使用动物模型,您可以创建如下查询:

\App\Animal::with('adoption')->select('name','dob')->get();

然后在动物模型中,您需要在动物和收养之间建立关系:

public function adoption()
{
    return $this->hasOne('App\Animal', 'animalID', 'animalID');
}

这将是通过领养信息获得动物的一种方法。

我真的建议您阅读Laravel文档中的关系和口才,并可能阅读一些SQL。

https://laravel.com/docs/5.8/eloquent

https://laravel.com/docs/5.8/eloquent-relationships

答案 2 :(得分:0)

假设您有一个Adoption模型,并且在adoption模型上具有Animal关系,则可以执行以下操作:

$animals = Animal::select('animalName`, `DOB`)
    ->with(['adoption' => function($query) {
        $query->where('approved', false);
    })->get();