Laravel Eloquent hasMany وBelongsToMany لا يعودان باستخدام مع

StackOverflow https://stackoverflow.com//questions/25028896

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول إجراء استعلام واحد لاستعادة ملف order و ال card لتوجيه الاتهام، ولكن الحصول على خطأ.

نموذج البطاقة:

class Card extends Eloquent {
    protected $guarded = array();

    public static $rules = array();

    public function user()
    {
        return $this->belongsTo('User');
    }

    public function orders()
    {
        return $this->hasMany('Order');
    }
}

نموذج الطلب:

class Order extends Eloquent {
    protected $guarded = array();

    public static $rules = array();

    public function user()
    {
        return $this->belongsTo('User');
    }

    public function card()
    {
        return $this->hasOne('Card');
    }

    public function address()
    {
        return $this->belongsTo('Address');
    }

    public function orderItems()
    {
        return $this->hasMany('OrderItem');
    }
}

ما أحاول استعادته:

$order = Order::with('card')->find($id);

من الواضح أن هذا لا يعمل ولقد حاولت عدة مجموعات.أعتقد أن المشكلة تتعلق بنماذجي/علاقاتي.

هل لديك أي فكرة عن كيفية استعادة الطلب باستخدام تفاصيل البطاقة/الرمز المميز؟

معلومات قاعدة البيانات:يمكن أن يحتوي كل طلب على طلب واحد فقط card_id ويمكن أن تكون كل بطاقة في العديد من الطلبات.لا يوجد order_id في البطاقة.

جدول الطلبات بشكل أساسي:

id | card_id

جدول البطاقات:

id | token

تحاول الحصول على token العقيد للعودة مع Order.

هل كانت مفيدة؟

المحلول

في الخاص بك Order النموذج، تحتاج إلى تغيير هذا:

public function card()
{
    return $this->hasOne('Card');
}

الى هذا:

public function card()
{
    return $this->belongsTo('Card');
}

والسبب هو أنك تحدد عكس hasMany علاقة.مع ال belongsTo العلاقة، سوف يبحث Eloquent عن أ card_id عمود على orders طاولة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top