Laravel使用模型连接两个数据库表

时间:2019-02-28 10:52:02

标签: php mysql laravel

如何从两个模型中连接这两个表:

Student.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'students';

}

和StudentDetails.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProductDetails extends Model
{
    protected $table = 'student_details';
}

然后在单个控制器中使用这两个模型:

    use App\Student;
    use App\StudentDetails;    
            public function index()
            {
                return Product::latest()
                  ->join('StudentDetails','StudentDetails.product_id','Product.product_id')
                  ->get();

                //I dont know what the right approach is but i was thinking of 
                  doing something like this
            }

我对StudentDetails模型的用途感到困惑。

我只是通过执行以下操作使其工作:

return Student::latest()
                  ->join('student_details','student_details.student_id','student.student_id')
                  ->get(); 

3 个答案:

答案 0 :(得分:0)

您甚至不想创建StudentDetails来使用您已使用的代码来获取数据。

仅当您使用关系获取数据时才需要模型StudentDetails。 为此,您必须提及两个表之间的关系。假设它有很多关系。

class Product extends Model
{
   protected $table = 'students';
   public function studentDetails(){
    return $this->hasMany(StudentDetails::class);
  }
}

现在提到的关系。 现在,您可以使用以下查询获取数据。

$product = Product::has('studentDetails')->get();

注意:如果您要获取StudentDetails的ID,这将返回该集合, 你必须这样做

$product->studentDetails[0]->id

$product->studentDetails->first()->id

希望这很清楚。

答案 1 :(得分:0)

我不太了解您的情况,但是通过关系checkout the docs

可以轻松而干净地实现这种简单的联接

据我了解,您正在尝试获取产品 -students-以及产品详细信息 -student_details- ..如果正确,那么您可以拥有


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'students';

    public function details()
    {
        return $this->hasMany(ProductDetails::class); // or just use your kind of relation
    }
}

然后


public function index()
{
    return Product::with('details')
      ->latest()
      ->get(); // this is exactly equal to your join
}

答案 2 :(得分:0)

如果您不想在模型上建立关系,则可以这样做:

   return Student::join('student_details','student_details.student_id','student.student_id')
-> select(stydent.*,student_details.*)->get();