简体   繁体   中英

laravel: convert many to many (but only one related item) mysql query to a laravel query

Hi I'm having trouble converting a mysql query that I've been working on into a laravel eloquent query and need some help. I have a reservations table which links to a product table with a many to many relationship. I want to pull all the reservations and just the first product it finds regardless of how many products are related to the reservation. Here's my sql:

SELECT reservations.id,
       reservations.play_date,
       reservations.group_size,
       reservations.status,
       reservations.event_title,
       t4.product_id,
       t4.id AS link_id,
       p1.name,
       CONCAT_WS(" ", customers.first_name, customers.last_name, customers.group_name) AS customerName,
       reservations.event_type
FROM reservations
LEFT JOIN customers ON reservations.customer_id = customers.id
LEFT JOIN
  (SELECT *
   FROM product_reservation AS t3
   GROUP BY t3.reservation_id ) AS t4 ON t4.reservation_id = reservations.id
LEFT JOIN products AS p1 ON t4.product_id = p1.id

I can place this as a raw query but that produces an array with the result - I need to be able to create a query object so I can work with another module on the results Is there an eloquent way of doing this - or how can I get this query to work in laravel? Thank you

Yeah, you can use Eloquent relationships. They would look something like this...

class Reservation extends Eloquent
{
    public function products()
    {
        return $this->belongsToMany('Product');
    }
}

class Product
{
    public function reservations()
    {
        return $this->belongsToMany('Reservation');
    }
}

$reservations = Reservation::with(array('products', function($q) {
    $q->take(1);
}))->get();

foreach($reservations as $reservation) {
    echo $reservation->name;
    foreach($reservation->products as $product) {
        echo $product->description;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM