Laravel: Как передать одну переменную одной модели для просмотра различных запросов и как получить к ней доступ в представлении - PullRequest
0 голосов
/ 15 октября 2019

Я учусь Ларавелу. Я запутался в одной точке.

У меня есть одна модель Trader, которая имеет отношение один к одному с двумя другими моделями AgriculturalProduceMarketCommettee и CategoryMaster. Таблица traders имеет apmc_id и category_id в качестве внешних ключей. Теперь я хочу показать traders_name, apmc_branch_name, category_name в одной таблице.

Модель трейдера

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Trader extends Model
{
       /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'traders';

    // primary key
   public $primaryKey = 'traders_id';

    //timestamps
    public $timestamps = true;

      /**
       * Attributes that should be mass-assignable.
       *
       * @var array
       */
      protected $fillable = [
          'apmc_id','category_id', 'traders_name', 'traders_address','traders_contact_number'
      ];


    /**
 * Get the apmc that has the trader.
 */
public function apmc()
{
    return $this->belongsTo('App\AgriculturalProduceMarketCommettee', 'apmc_id');
}


    /**
 * Get the category that has the trader.
 */
public function categoryMaster()
{
    return $this->belongsTo('App\CategoryMaster', 'category_id');
}

}

TraderController

public function index()
    {
        $traders = Trader::all();
        $traderApmc = Trader::with('apmc')->get();
        $traderCategory = Trader::with('categoryMaster')->get();
        return view('traders.tradersDetails', compact('traders','traderApmc','traderCategory'));
    }

tradersDetails.blade.php: view

 <table id="example1" class="table table-bordered table-striped">
                        <thead>
                        <tr>
                          <th>Trader Name</th>
                          <th>APMC Branch Name</th>
                          <th>Category Name</th>

                        </tr>
                        </thead>
                        <tbody>
                          @if(count($traders) >= 1)
                          @foreach ($traders as $trader)

                        <tr>
                            <td> {{$trader->traders_name}} </td>
                            <td> {{$traderApmc->apmc->apmc_branch_name}} </td>  
                            <td> {{$traderCategory->categoryMaster->category_name}} </td> 
                        </tr>
                        @endforeach 
                        @else
                        <p>No records found!</p>
                        @endif
                        </tbody>
                     </table>

Теперь в TraderController я передаю 3 разные переменные 'traders','traderApmc','traderCategory' для одной модели Trader для просмотра tradersDetails для 3 разных запросов. Но с точки зрения того, как я использовал эти переменные, я получу ошибку экземпляра коллекции, такую ​​как

Facade\Ignition\Exceptions\ViewException Property [apmc] does not exist on this collection instance.

Как мне передать эти переменные и получить к ним доступ? Пожалуйста, руководство. Заранее спасибо.

1 Ответ

0 голосов
/ 15 октября 2019

вместо 3-х переменных вы можете объединить, используя:

$trader = Trader::with(['apmc','categoryMaster'])->get();

, передавая на ваше представление:

return view('traders.tradersDetails', compact('traders'));

, и вы можете использовать его на вашем представлении:

@foreach ($traders as $trader)
   <tr>
       <td> {{$trader->traders_name}} </td>
       <td> {{$trader->apmc->apmc_branch_name}} </td>  
       <td> {{$trader->categoryMaster->category_name}} </td> 
  </tr>
@endforeach 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...