如何从其他表中获取所需的列
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 查询以获取顶部记录