سلام خسته نباشید.
ارور:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_category_id' in 'field list' (SQL: select `category_category_id` from `categorizables` where `categorizable_id` = 25 and `categorizable_type` = App\Package)
مدل پکیج:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $table = 'categories';
protected $primaryKey = 'category_id';
public $timestamps = false;
protected $fillable = ['category_name'];
public function Package()
{
return $this->morphedByMany(Package::class, 'categorizable');
}
}
مدل دسته بندی:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Package extends Model
{
protected $table = 'packages';
protected $primaryKey = 'package_id';
protected $guarded = 'package_id';
protected $fillable = ['package_title', 'package_price'];
public function File()
{
return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
}
public function Package()
{
return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
}
public function Categories()
{
return $this->morphToMany(Category::class, 'categorizable');
}
}
کنترولر پکیج:
public function store(Request $request)
{
$this->validate($request, [
'package_title' => 'required',
'package_price' => 'required'
]);
$NewPackage = Package::create([
'package_title' => $request->input('package_title'),
'package_price' => $request->input('package_price')
]);
if ($request->has('categories')) {
$NewPackage->Categories()->sync($request->input('categories'));
}
if ($NewPackage) {
return redirect()->route('admin.package.list')->with('success', 'با موفقیت اضافه شد');
}
}
دیتابیس:
categories { category_id,category_name}
categorizables {category_id,categorizable_id,categorizable_type}
در جای که morphToMany رو تعریف میکنید فیلد ها رو هم بگید کدوم به کدومه
چون اصولا در categories باید id باشه نه category_id این بد بختم (لاراول) متوجه نمیشه پس باید بهش بفهمونید در اون متد
@mrkiani.dev
بله تغییری که نمایش دادید رو بفرستید
ارورتون رو هم ببینید نشون دهنده این هست که مشکلتون مربوط به پیاده سازی روابط هست
البته من پیشنهاد میکنم در جدول categories بجای قرار دادن category_id و category_name
فقط قرار بدیم id و name
چه کاریه واقعا
من فیلد های جدول categories رو به id و name تغیر دادم
Category Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $table = 'categories';
protected $primaryKey = 'id';
public $timestamps = false;
protected $fillable = ['name'];
public function Package()
{
return $this->morphedByMany(Package::class, 'categorizable_type', 'categorizables' , 'categorizable_id' , 'category_id');
}
}
Package Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Package extends Model
{
protected $table = 'packages';
protected $primaryKey = 'package_id';
protected $guarded = 'package_id';
protected $fillable = ['package_title', 'package_price'];
public function File()
{
return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
}
public function Package()
{
return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
}
public function Categories()
{
return $this->morphToMany(Category::class, 'category_id' , 'categorizables' , 'category_id' , 'categorizable_id');
}
}
من درست این Polymorphic relationships درک نکردم بخاطر همینه که اشتباه می کنم
متن ارور
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_id_type' in 'where clause' (SQL: select `categorizable_id` from `categorizables` where `category_id` = 32 and `category_id_type` = App\Package)
Category Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $table = 'categories';
protected $primaryKey = 'id';
public $timestamps = false;
protected $fillable = ['name'];
public function Package()
{
return $this->morphedByMany(Package::class, 'categorizable', 'categorizables' , 'categorizable_id' , 'category_id');
}
}
Package Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Package extends Model
{
protected $table = 'packages';
protected $primaryKey = 'package_id';
protected $guarded = 'package_id';
protected $fillable = ['package_title', 'package_price'];
public function File()
{
return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
}
public function Package()
{
return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
}
public function Categories()
{
return $this->morphToMany(Category::class, 'categorizable' , 'categorizables' , 'category_id' , 'categorizable_id');
}
}
اینا گذاشتم که بدونند مشکل از کجا بوده ، ممنون بابت راهنمایی تون
با این حال عمیقا پیشنهاد میکنم در کدی که نوشتید بازنگری کنید دیگه داخل جدول packages نیاید فیلد package_id قرار بدید همون اسم id بهترین حالته
نیاید داخل جدول categories فیلد category_id بزارید همون id درستتره.
اینکه شم ااینا رو تغییر میدید فقط باعث کثیف شدن کدهاتون میشه
البته از ما گفتن بود
@hesammousavi
تجربه شما از تجربه من خیلی بیشتره و حتما از نکات شما استفاده میکنم :) ممنون
سلام .
من یه خطا توی بخش پلی مورفیک ریلیشن شیپ دارم
Route::get('user/photo',function(){
$user = \\App\\User::find(1);
foreach ($user->photos as $photo){
echo $photo->path;
echo "</br>";
}
});
Invalid argument supplied for foreach()
دستور فور ایچ کار نمیکنه
همه جارم بررسی کردم. مشکل از Foreach هستش
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟