Отображение данных из базы данных в представлении с использованием отношений Laravel

Я пытаюсь получить данные из таблицы «Клиенты», «Ваучеры» и «Счета» и отобразить их в представлениях. Клиент имеет много отношений с векселями и ваучерами. Вот мой код для моделей:

Покупатель:

    public function Bills(){
return $this->hasMany('App\Bill', 'customer', 'id');
}

public function Vouchers(){
return $this->hasMany('App\Voucher', 'customer_name', 'id');
}

Вот мой код для модели ваучеров:

 public function Customer(){
return $this->belongsTo('App\Customers', 'id', 'customer_name');
}

Вот код для модели векселей:

    public function Customer(){
return $this->belongsTo('App\Customers', 'id', 'customer');
}

Вот функция контроллера, которую я сделал для этой цели:

public function client_search(Request $request){
$date_from = $request['from-date-city'];
$date_to = $request['to-date-city'];
$client = $request['client'];

$results = Customers::with('Bills', 'Vouchers')
->where('id', $client)->get();
return view('pages.prints.ledger-report-clientwise')->with('results', $results);
}

И вот как я пытаюсь отобразить в представлениях:

@foreach($results as $result)
<tr>
<td>{{$result->Vouchers->date}}</td>
<td>{{$results->Vouchers->narration}}</td>
<td>{{$result->Vouchers->amount}}</td>
<td>{{$result->Bill->total_amount}}</td>
<td>{{$result->balance}}</td>

</tr>

@endforeach

Вот ошибка, которую я получаю:

(2/2) ErrorException
Property [date] does not exist on this collection instance. (View: D:\Code\PHP\Code\CrownBillingSystem\resources\views\pages\prints\ledger-report-clientwise.blade.php)
in Collection.php (line 1661)
at CompilerEngine->handleViewException(object(Exception), 1)
in PhpEngine.php (line 44)
at PhpEngine->evaluatePath('D:\\Code\\PHP\\Code\\CrownBillingSystem\\storage\\framework\\views/f61b2b4b91bb544a7ee3c5532f7b257b0da1b8fb.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'results' => object(Collection)))
in CompilerEngine.php (line 59)
at CompilerEngine->get('D:\\Code\\PHP\\Code\\CrownBillingSystem\\resources\\views/pages/prints/ledger-report-clientwise.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'results' => object(Collection)))
in View.php (line 137)
at View->getContents()
in View.php (line 120)
at View->renderContents()
in View.php (line 85)
at View->render()
in Response.php (line 38)
at Response->setContent(object(View))
in Response.php (line 201)
at Response->__construct(object(View))
in Router.php (line 617)
at Router->prepareResponse(object(Request), object(View))
in Router.php (line 574)
at Router->Illuminate\Routing\{closure}(object(Request))
in Pipeline.php (line 30)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in SubstituteBindings.php (line 41)
at SubstituteBindings->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in VerifyCsrfToken.php (line 65)
at VerifyCsrfToken->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in ShareErrorsFromSession.php (line 49)
at ShareErrorsFromSession->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in StartSession.php (line 64)
at StartSession->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in AddQueuedCookiesToResponse.php (line 37)
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in EncryptCookies.php (line 59)
at EncryptCookies->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in Pipeline.php (line 102)
at Pipeline->then(object(Closure))
in Router.php (line 576)
at Router->runRouteWithinStack(object(Route), object(Request))
in Router.php (line 535)
at Router->dispatchToRoute(object(Request))
in Router.php (line 513)
at Router->dispatch(object(Request))
in Kernel.php (line 176)
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
in Pipeline.php (line 30)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in TransformsRequest.php (line 30)
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in TransformsRequest.php (line 30)
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in ValidatePostSize.php (line 27)
at ValidatePostSize->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in CheckForMaintenanceMode.php (line 46)
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
in Pipeline.php (line 148)
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php (line 53)
at Pipeline->Illuminate\Routing\{closure}(object(Request))
in Pipeline.php (line 102)
at Pipeline->then(object(Closure))
in Kernel.php (line 151)
at Kernel->sendRequestThroughRouter(object(Request))
in Kernel.php (line 116)
at Kernel->handle(object(Request))
in index.php (line 53)
at require_once('D:\\Code\\PHP\\Code\\CrownBillingSystem\\public\\index.php')
in server.php (line 21)

0

Решение

Ну, вот твоя проблема. Vouchers это hasMany отношения, то есть это вернет Collection объект при вызове с $result->VouchersЭто означает, что это по сути массив, а не один объект. Если вы хотите получить доступ $result->Vouchers->dateвам придется перебрать каждый из Vouchers и повторяйте их по одному или используйте первый:

@foreach($results as $result)
@foreach($result->Vouchers AS $voucher)
<span>The date is {{ $voucher->date }}</span>
@endforeach
@endforeach

Следующая проблема в том, что у вас есть <td>{{ $results->Vouchers->narration }}</td>, что является той же проблемой, что и раньше; пытаясь получить доступ к свойству Collectionи ни одного $result или же Voucher объект. (Это выглядит как опечатка, хотя)

У вас есть правильная идея, но вам нужно знать, когда вы получаете доступ к Collection против, когда вы получаете доступ к Objectтак что читайте о коллекциях Laravel https://laravel.com/docs/5.4/collections и красноречивый https://laravel.com/docs/5.4/eloquent

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]