如何从两个模型中连接这两个表:
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();
答案 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();