lundi 4 septembre 2017

Complicated Eloquent relationship using `Model::query`

I have a complicated relationship I'm trying to establish between two models.

The goal is to use $supplier->supply_orders to access the orders where the user supplies an item.

This throws: LogicException: Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation.

With the code I've got I can use $supplier->supply_orders()->get(), however, when I try to use it as a relationship it throws. Since this is a relationship I should be able to wrap it in a relationship, but how would I go about doing that?

Supplier Model:

class Supplier extends Model {
    public function supply_orders() {
        return Order::query()
            ->select('order.*')
            ->join('item_order', 'order.id', '=', 'item_order.order_id')
            ->join('item', 'item_order.item_id', '=', 'item.id')
            ->where('item.supplier_id', '=', $this->id);
    }
}

~~~ A whole lot of back info that I don't think you need but might ~~~

sql tables:

supplier
- id

items:
- id
- supplier_id

item_order:
- id
- order_id
- item_id

orders:
- id

The other Eloquent Models:

class Item extends Model {
    public function orders() {
        return $this->belongsToMany('Order');
    }
}

class Order extends Model {}

Example of how this should work:

$supplier = factory(Supplier::class)->create();
$item = factory(Item::class)->create([
    'supplier_id' => $supplier->id,
]);
$order = factory(Order::class)->create();
$order->items()->attach($item);
$orders = $supplier->supply_orders // Throws LogicException

This throws: LogicException: Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire