shubh sharma
shubh sharma

Reputation: 11

how to get desired column from other table

there are two tables products and categories, that I created by PHPMyAdmin. In the products table, it has a column name prd_category that has the foreign key of table categories named cat_id(primary key of categories table).

i am quite new in laravel i want return all data from product table with category name(cat_name) from another table

//here is my controller

use App\Models\product;

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

//route

Route::get('/',[items::class,'sample']);

//model for products table

class product extends Model
{
    use HasFactory;

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

//model for category

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

}

pls help and thanks in advance..

Upvotes: 0

Views: 58

Answers (3)

Bulent
Bulent

Reputation: 3411

Are you sure that one-to-many relation is correct? If a product can belong to many categories, you need to use many-to-many relations. Furthermore, if something else belongs to categories you should use many-to-many polymorphic relations. But let's go with one-to-many.

First, the relation function in Product.php looks incorrect. I think products should belong to a category.

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

Then you need to define reverse relation in Category.php

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

When you define the relations properly, all you need yo do is to fetch data in controller:

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

Upvotes: 0

iAmGroot
iAmGroot

Reputation: 868

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();

in Blade :

{{ $cat->products->cat_name; }}

Upvotes: 0

Babak Asadzadeh
Babak Asadzadeh

Reputation: 1239

you can use this code:

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

or :

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

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

Upvotes: 1

Related Questions