راکت
bardia
bardia
توسط 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 

مشگل کجاست


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

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


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

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


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

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


bardia
bardia
تخصص :Golang/Laravel
@mrbardia727 سال پیشمطرح شد
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();

سیدعلی موسوی
سیدعلی موسوی
تخصص :سی شارپ و پی اچ پی
@juza667 سال پیشمطرح شد
2

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


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

@juza666

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

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

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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


bardia
bardia
تخصص :Golang/Laravel
@mrbardia727 سال پیشمطرح شد
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.bayat7 سال پیشمطرح شد
1
Trying to get property of non-object 

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


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

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

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

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

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


bardia
bardia
تخصص :Golang/Laravel
@mrbardia727 سال پیشمطرح شد
صفحه 1 از 2

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

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