Php 如何从其他表中获取所需的列

Php 如何从其他表中获取所需的列,php,mysql,laravel,laravel-8,Php,Mysql,Laravel,Laravel 8,有两个由PHPMyAdmin创建的表products和categories。 在products表中,它有一个列名prd_category,该列名具有名为cat_id(categories表的主键)的表类别外键 我在拉雷维尔是个新手 我想从另一个表返回具有类别名称(cat_名称)的产品表中的所有数据 //这是我的控制器 use App\Models\product; class items extends Controller { public function sample(){

有两个由PHPMyAdmin创建的表products和categories。 在products表中,它有一个列名prd_category,该列名具有名为cat_id(categories表的主键)的表类别外键

我在拉雷维尔是个新手 我想从另一个表返回具有类别名称(cat_名称)的产品表中的所有数据

//这是我的控制器

use App\Models\product;

class items extends Controller
{
    public function sample(){ 
        return product::all();
    }
}
//路线

Route::get('/',[items::class,'sample']);
//产品表的模型

class product extends Model
{
    use HasFactory;

    function category(){
        return $this->hasOne('App\Models\category','cat_id','prd_id');
        
    }
}
//类别模型

class category extends Model
{
    protected $table='categories';
    use HasFactory;

}
请提前帮助和感谢。

您可以使用以下代码:

$products = product::whereHas('category',function($q)use($cat_name){
    $q->where('name',$cat_name)
})->get();
或:


你确定一对多关系是正确的吗?如果产品可以属于多个类别,则需要使用多对多关系。此外,如果其他内容属于类别,则应使用多对多多态关系。但让我们选择一对多

首先,Product.php中的关系函数看起来不正确。我认为产品应该属于一个类别

function category(){
   return $this->belongsTo('App\Models\Category','cust_name','name');     
}
然后需要在Category.php中定义反向关系

function products(){
   return $this->hasMany('App\Models\Product','cust_name','name');     
}
正确定义关系后,只需在控制器中获取数据:

use App\Models\Category
...
Category::with('products')->get();
刀片中:

{{ $cat->products->cat_name; }}
you can use relationship with forign key like pro_id

function category(){
   return $this->belongsTo('App\Models\Category','pro_id');     
}

function products(){
   return $this->hasMany('App\Models\Product','id');     
}

$cat = Category::with('products')->all();
{{ $cat->products->cat_name; }}