#php #mysql #laravel #laravel-8
#php #mysql #laravel #laravel-8
Вопрос:
есть две таблицы products и categories, которые я создал с помощью phpMyAdmin. В таблице products у него есть столбец с именем prd_category, который имеет внешний ключ категорий таблицы с именем cat_id (первичный ключ таблицы категорий).
я совсем новичок в laravel, я хочу вернуть все данные из таблицы продуктов с именем категории (cat_name) из другой таблицы
// вот мой контроллер
use AppModelsproduct;
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('AppModelscategory','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('AppModelsCategory','cust_name','name');
}
Затем вам нужно определить обратное отношение в Category.php
function products(){
return $this->hasMany('AppModelsProduct','cust_name','name');
}
Когда вы правильно определяете отношения, все, что вам нужно сделать, это получить данные в контроллере:
use AppModelsCategory
...
Category::with('products')->get();
Ответ №3:
you can use relationship with forign key like pro_id
function category(){
return $this->belongsTo('AppModelsCategory','pro_id');
}
function products(){
return $this->hasMany('AppModelsProduct','id');
}
$cat = Category::with('products')->all();
в блейде :
{{ $cat->products->cat_name; }}