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

Posted

技术标签:

【中文标题】如何从其他表中获取所需的列【英文标题】:how to get desired column from other table 【发布时间】:2021-02-15 01:44:04 【问题描述】:

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

我是 laravel 的新手 我想从另一个表中返回带有类别名称(cat_name)的产品表中的所有数据

//这是我的控制器

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;


请提前帮助和感谢..

【问题讨论】:

【参考方案1】:

您可以使用此代码:

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

或:

$categories = Category::where('name',$cat_name)->get()->pluck('id')->toArray()

$products = product::whereIn('category_id',$categories)->get();

【讨论】:

【参考方案2】:

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

首先,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();

【讨论】:

【参考方案3】:
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; 

【讨论】:

以上是关于如何从其他表中获取所需的列的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个表中获取数据并插入到 EF Core 中所需的表中

如果所需的列值重复 [重复],则 SQL 查询以获取顶部记录

仅从网站中提取所需的列

从 web api 加载谷歌地图所需的标记,并在相机移动时动态加载其他标记

INSERT-OUTPUT 包括来自其他表的列

使用其他表的列从表中删除