راکت

ارتباظ یک به یک در لاروال

27 پاسخ

من یه دو تا جدل دارم یکی page و یکی دیکه هم menu

داخل مدل menu متد رو به صورت زیر تعریف کردم:

    public function page(){
        return $this->belongsTo('App\Page');
    }

داخل مدل page متد رو به صورت زیر تعریف کردم:

    public function menu(){
        return $this->hasOne('App\Menu');
    }

اینم داخل view:

 <td>{{$menu->page->title}}</td>

اینم خطای که میده:

Trying to get property of non-object 

مشگل کجاست

ثبت پرسش جدید

پاسخ‌ها

27
مهدی
مهدی
@code2code

به نظر من یه dd از menu بگیر ببینم چیه

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@sj10ss بی زحمت شما از migration یا جدول دیتابیستون یه عکس بفرستید تا بهتر راهنماییتون کنیم. اینطوری مشخص نیست . احتمالا باید به صورت دستی foreign key رو مشخص کنید

شاید پاسخ شما همین‌جا باشد

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@code2code
dd میزنم خروجی میده نام page رو برمیگردونه

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@mohsenbostan
این منو:

$table->string('name');
            $table->string('url')->default('#');
            $table->tinyInteger('status')->default(0);
            $table->string('targets')->default('all');
            $table->string('icon');

            $table->integer('parent_id')->unsigned()->nullable();
            $table->foreign('parent_id')->references('id')->on('menus')->onDelete('cascade');

            $table->integer('user_id')->unsigned()->nullable();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->integer('page_id')->unsigned()->nullable();
            $table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');

این page:

$table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users');

            $table->integer('category_id')->unsigned();
            $table->foreign('category_id')->references('id')->on('categories');
            $table->string('title');
            $table->string('slug')->nullable();
            $table->text('summary')->nullable();
            $table->longText('content')->nullable();
            $table->string('keywords')->nullable();
            $table->integer('visits')->unsigned()->default(0);
            $table->tinyInteger('status')->default(0);
            $table->string('targets')->default('all');
            $table->dateTime('published_at')->nullable();
            $table->timestamps();
            $table->softDeletes();
سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

باید متد رو صدا کنی page()

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@juza666

گذاشتم خطای زیر رو میده

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$title
Mohsen Hassanshahi
Mohsen Hassanshahi
@a.hassanshahi74

تخصص: برنامه نویس

بعضی مواقع دیتابیس Relation ها رو نمیشناسه
باید engine دیتابیس رو روی innodb تنظیم کنید

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@sj10ss
$table->engine = "InnoDB";
اینو به migration تون اضافه کنید ببینید درست میشه ...

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@a.hassanshahi74
اتفاقا Innodb هست

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@mohsenbostan
هیج فرقی نکرد

developer
developer
@developer

تخصص: برنامه نویس

{{App\Page::whereId($menu->page_id)->first()->title}}
‍‍‍
اینو بذار به جای اون توی ویو ببین چیزی برمیگردونه

مهدی
مهدی
@code2code

نگاه اینجوری نمیشه
به نظرم اگه میخوای واقعا مشکلاتت سریع حل شه بهترین راه اینه که خودت اول حسابی دیباگ کنی
راههای زیادی داره مثلا ابتدایی ترین اینه که ببینم واقعا چه نوع متغییری داری به ویو میفرستی
قبلش dump بگیر شاید داری یه آرایه صدا میزنی ....

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@alirezasafdari
جواب نداد
همون خطا رو داد

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@code2code
بله میدونم
این راه ها رو قبلش رفتم اما مشکلی حل نشد

مهدی
مهدی
@code2code

@sj10ss
خوب اون قسمت کدتو آپلود کن جایی خیلی راحتتر میشه کمکت کرد
چون اینجور مشکلا کلیه...
و مثلا ما یه کاریو همین طور که تو کردی انجام میدیم و بدون مشکله
ولی کد خودتو که ببینیم میفهمیم بله فلان جا رو اشتباه کردی ...
شاید بقیه بهتر بتونن دیباگ کنن

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@code2code

داخل مدل menu متد رو به صورت زیر تعریف کردم:

public function page(){
    return $this->belongsTo('AppPage');
}

داخل مدل page متد رو به صورت زیر تعریف کردم:

public function menu(){
    return $this->hasOne('AppMenu');
}

اینم داخل view:

<td>{{$menu->page->title}}</td>

داخل کنترلر هم باید چیزی اضافه کنم؟

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

Trying to get property of non-object 

شما دارید سعی می‌کنید یه پراپرتی رو از متغیری بگیرید که یه کلاس نیست در نتیجه ارور میده.
Eager-Loading رو امتحان کردید؟

محمد صادقیان
محمد صادقیان
@drcode.ir

تخصص: برنامه نویس وب - فریم ورک Laravel

اینو هم به belongsTo تغییر بدید.

public function menu(){
        return $this->hasOne('App\Menu');
    }
مهدی
مهدی
@code2code

namespace رو تو کدات اشتباه نوشتی!!!!

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

صفحه 1 از 2

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام