Отображение отношения от одного к hasMany в Laravel - PullRequest
0 голосов
/ 08 февраля 2020

Я хочу отобразить имя своего местоположения в виде, но не могу понять, что я делаю неправильно.

Модель местоположения -

public function orderz()
{
    return $this->hasMany('App\Models\Order', 'location', 'location_id');
}
}

Заказать модель

public function location()
{
    return $this->belongsTo('App\Models\Order');
}

LocationsController. php -

public function show($id)
{
    $locations = Location::find($id)->orderz()->whereDate('created_at', '=', Carbon::today()->toDateString());
    $orders = Order::all();
    $wallets = Wallet::all();
    //$orders = DB::table('orders')->where('location', '=', 'New York')->get();
    return view('location')
        ->with('locations', $locations)
        ->with('wallets', $wallets)
        ->with('orders', $orders);
}

Я так называю:

@foreach ($locations as $location)
    @foreach($location->orders as $order)
        {{$order->location_id}}
    @endforeach
@endforeach

Когда я удаляю из кода фильтр даты, он работает, но я показываю заказы за все дни.

        $locations = Location::find($id)->orders()->whereDate('created_at', '=', Carbon::today()->toDateString());

, чтобы выглядеть так:

$locations = Location::find($id)->orders;

Ответы [ 4 ]

0 голосов
/ 13 февраля 2020

Я только что еще раз позвонил в мои местоположения с другой переменной, и теперь все в порядке

$loc = Location::find($id);
    $locations = Location::find($id)->orders()->whereDate('created_at', '=', Carbon::today()->toDateString());

Для отображения названия моего местоположения я использую

{{$loc->location_id}}
0 голосов
/ 08 февраля 2020

Измените код вашего контроллера на что-то вроде этого.

Если вы хотите получить местоположение по идентификатору:

public function show($id)
{
    $locationWithOrderz = Location::with('orderz')->where('id', $id)->first();
    $orders = Order::all();
    $wallets = Wallet::all();

return view('location', compact('locationWithOrderz', 'wallets', 'orders'));
}

Обновление Вы не можете перебрать oop через $ местоположения при получении одного запись. (Спасибо @FouedMOUSSI)

foreach($locationWithOrderz->orderz as $order)
    {{$order->location_id}}
@endforeach


Чтобы определить местоположение по дате:

public function index()    //Changed function name and argument
{
$locations = Location::with('orderz')->whereDate('created_at', '=', Carbon::today()->toDateString())->get();
$orders = Order::all();
$wallets = Wallet::all();

return view('location', compact('locations', 'wallets', 'orders'));
}

Примечание: вам нужно будет соответствовать точный формат сохраняемой даты в made_at при использовании Carbon (без минут и секунд), или вы, вероятно, ничего не получите в $ местоположениях.

Здесь вы можете l oop через местоположения:

@foreach ($locations as $location) 

    @foreach($location->orders as $order)
    {{$order->location_id}}
    @endforeach

@endforeach
0 голосов
/ 08 февраля 2020

Убедитесь, что в отношениях «один ко многим» вторым аргументом должен быть внешний ключ в модели заказа. Eloquent автоматически определит правильный столбец внешнего ключа в таблице заказов. Теперь ваши отношения должны быть.

public function orderz()
{
    return $this->hasMany('App\Models\Order', 'foreign_key_in_order_model', 'primary_key_in_location_model');
}

Ваш окончательный код должен выглядеть следующим образом.

 public function orderz()
 {
     return $this->hasMany('App\Models\Order', 'location_id', 'location');
 }
0 голосов
/ 08 февраля 2020

Вы можете использовать готовую загрузку:

//Controller
$locationWithOrderz = Location::with('orderz')->where('id', $id)->first();
$wallets = Wallet::all();

return view('location')
    ->with('location', $locationWithOrderz)
    ->with('wallets', $wallets);

//blade

@foreach($location->orderz as $order)
        {{$order->...}}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...