درود بر مهندسین گرامی 🌹بنده می خوام از طریق روابط از متد firstOrCreate استفاده کنم که در روابط به ارور بر می خورم و واقعا نمی دونم مشکل چیه!! فقط نمودونم چرا مقدار
$attr->values()
را null بر میگردونه!!
مربوط به این بخشه که کالکشن هست
public function store(Request $request)
{
$data = $request->validate([
'attributes' => ['required', 'array']
]);
//For Attributes
$attributes = collect($data['attributes']);
$attributes->each(function ($item) {
if (is_null($item['name']) || is_null($item['value'])) return;
$attr = Attribute::firstOrCreate(
['name' => $item['name']]
);
$attr_value = $attr->values()->firstOrCreate(
['value' => $item['value']]
);
dd($attr_value);
});
}
وقتی dd تست میگیرم این ارور میده البته create هم میگم همینه.
Call to a member function firstOrCreate() on null
روابط هم درسته اما این نال نمی دونم برا چیه
این بخش مربوط به جلسه 91 ویژگی محصول دوره پروژه محور راکت هست.
ممنون میشم راهنماییم کنید🙏🙏🙏
@aliasgharkashani1379
سلام این کد return نداره
public function values()
{
$this->hasMany(AttributeValue::class);
}
اینجوری باید باشه
public function values()
{
return $this->hasMany(AttributeValue::class);
}@eniack درود بر مهندس عزیز
بله وقتی خروجی میگیرم attr فیلد name ش ساخته میشه و فقط attr_value ساخته نمیشه!
شاید پاسخ شما همینجا باشد
سلام دوست عزیز.
این کدو بعد از خط 6 بنویسید و خروجی رو ببینید.
return $data['attributes'];@arminrahmati999 درود بر مهندس عزیز
این خروجی میده:
array:2 [▼
0 => array:2 [▼
"name" => "رنگ"
"value" => "قرمز"
]
1 => array:2 [▼
"name" => "گارانتی"
"value" => "12 ماه"
]
]rezajahangir@ @rezajahangir درود بنده این ویژگی هارو گفتم و وقتی خروجی که شما گفتید گرفتم این برام برگشت داده شد.

array:2 [▼
"name" => "رنگ"
"value" => "سبز"
]@rezajahangir مهندس انجام دادم اما تفاوتی با قبلی نکرد و فقط آیتم اول که شامل رنگ و نوع رنگ بود برگردوند. یعنی name و value اولی
@rezajahangir خروجی $attr:
#attributes: array:2 [▼
"name" => "رنگ"
"id" => 1
]
#original: array:2 [▼
"name" => "رنگ"
"id" => 1
]
کد روابط داخل مدل Attribute:
class Attribute extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['name'];
public function values()
{
$this->hasMany(AttributeValue::class);
}
}
این هم مایگریشن attribute و value که روابط بینش یک به چند هست.
public function up()
{
Schema::create('attributes', function (Blueprint $table) {
$table->id();
$table->string('name');
});
Schema::create('attribute_value', function (Blueprint $table) {
$table->id();
$table->string('value');
$table->unsignedBigInteger('attribute_id');
$table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade');
});
}
این هم مدل Attribute_value
class AttributeValue extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['value'];
public function attribute()
{
$this->belongsTo(Attribute::class);
}
}
من توی کد مشکلی نمیبینم !!!!
این کد رو جایگزین ساخت table کنید ببینید چی میشه
Schema::create('attribute_values', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('attribute_id');
$table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade');
$table->string('value');
$table->timestamps();
});@eniack مهندس این کار هم انجام دادم اما بازم نشد!!1😐😐😐
واقعا دیگه نمی دونم چ کنم
ممنون از شما
حتما جدول هاشو هم جدو گونه در دوتا مایگریشن ایجاد کردم اما باز هم نشد.