bardia
6 سال پیش توسط bardia مطرح شد
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 

مشگل کجاست


ثبت پرسش جدید
مهدی
@code2code 6 سال پیش مطرح شد
2

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


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

@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 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

@juza666

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

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$title

Mohsen Hassanshahi
تخصص : برنامه نویس
@a.hassanshahi74 6 سال پیش مطرح شد
2

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


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

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


developer
تخصص : برنامه نویس
@developer 6 سال پیش آپدیت شد
2

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


مهدی
@code2code 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
2

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


مهدی
@code2code 6 سال پیش آپدیت شد
1

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش آپدیت شد
1

@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 6 سال پیش مطرح شد
1
Trying to get property of non-object 

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


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش مطرح شد
1

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

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

مهدی
@code2code 6 سال پیش مطرح شد
1

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
1

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

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