Laravel find()忽略控制器中的重复ID

时间:2018-02-22 02:22:54

标签: php laravel

我的控制器$ course_id中有一个变量,它是一个数组:

array:3 [▼
0 => 2
1 => 0
2 => 2
] 

当我尝试将其用作查找语句的一部分时,任何重复的值都会被忽略,所以

$courses = Course::with(['orders'])->orderBy('id', 'asc')->find($course_id);

我的观点中有以下内容

<?php foreach($courses as $course){
echo $course->id;};
?>

输出为'02' 我需要'202' 知道如何阻止复制被覆盖吗?

由于数据透视表等原因,有很多事情要进入这个阶段,但这些都可以在我的客户控制器中找到,我需要显示他们的订单和课程详细信息等。

 public function show($id)
{
    $customer = Customer::with(['orders'])->findOrFail($id);
    foreach($customer->orders as $order){
        $order_id[] = $order->id;
        $course_id[] = $order->course_id; 
        $delivery_mode_id[] = $order->delivery_mode;
        $campus_id[] = $order->location;

    };

    $orders = Order::with(['courses'])->orderBy('id', 'asc')->find($order_id);
    $courses = Course::with(['orders'])->orderBy('id', 'asc')->where($course_id);
    $delivery_modes = DeliveryMode::with('orders')->orderBy('id', 'asc')->find($delivery_mode_id);
    $campuses = Campus::with('orders')->orderBy('id', 'asc')->find($campus_id);

    return view('customers.show', compact('customer', 'courses', 'orders', 'delivery_modes', 'campuses', 'order'));

}

以下是我需要它输出的方法,当ID是唯一的时它可以正常工作但是当我订购相同的课程,位置或交付方法中的2时,重复项不会出现。

 <tbody>
        <tr>
        @foreach($courses as $course)
        <td style="border-bottom:0; border-right:1px solid #dbdbdb;">{{$course->name}}</td>
        @endforeach 
        </tr>

        <tr>
        @foreach($campuses as $campus)
        <td style="border-bottom:0; border-right:1px solid #dbdbdb;">{{$campus->name}}</td>
        @endforeach
        </tr>
        <tr>
        @foreach($delivery_modes as $delivery_mode)
        <td style="border-bottom:0; border-right:1px solid #dbdbdb;">{{$delivery_mode->name}}</td>
        @endforeach

        </tr>
        <tr>
        @foreach($orders as $order)
        <td style="border-bottom:0; border-right:1px solid #dbdbdb;"><?php $displaycomdate = date("d-m-Y", strtotime($order->start_date)); echo $displaycomdate ?></td>
        @endforeach
        </tr>
    </tbody> 

2 个答案:

答案 0 :(得分:2)

&#34;查找与#34;返回基于主键的单个结果。当您在寻找单个特定结果时使用它。

&#34;其中&#34;返回符合您限制的所有结果。如果需要多个结果,请使用此选项。

答案 1 :(得分:1)

阅读完您的视图后,您应该在控制器中更改您的查询(假设您已在模型中创建了所有必要的关系)

$orders = Order::with(['courses','campuses','delivery_modes'])->orderBy('id', 'asc')->find($order_id);

这样做的目的是在一个查询中提取特定客户的订单以及课程,位置/校园和交付模式,这样您就不再需要查询$ courses $ campuses $ delivery_modes了,然后在您的视图中,您只需循环 $ orders-&gt;课程,$ orders-&gt;校园,$ orders-&gt; delivery_modes 以列出所有这些信息