从视图中可以看到Laravel 5.3访问权限

时间:2016-11-10 07:17:23

标签: laravel laravel-5 eloquent

我试图从控制器传入的数据集合中访问关系表。我可以在视图中迭代集合,但我无法访问关系数据。

有2个表:

  • 股票(默认型号)
  • stock_datas(已设置外键stock_id)

控制器:

public function getstock() {
        return view('vehicles.getstock', ['stock' => \App\Stock::all()]);
    }

模型(App \ Stock)然后(App \ StockData)

// From stock model:
public function stockdata() {
        return $this->hasOne('App\StockData');
    }

// Stock Data model:
public function stock() {
        return $this->belongsTo('App\Stock');
    }

查看(循环):

@foreach ($stock as $k => $v)
     {{ print_r($v->stockdata()->get())->year }}
@endforeach

当我尝试下面的查询时,我得到了一个

 Undefined property: Illuminate\Database\Eloquent\Collection::$year (View: F:\websites\tempsite\resources\views\vehicles\getstock.blade.php)

但是,year是stock_datas表中的一列。

我也可以从\ App \ StockData()表中打印_r数据,因此对表的引用是正确的,因为从控制器执行print_r(\ App \ StockData :: all())会将所有行返回为预期

我做错了什么?

4 个答案:

答案 0 :(得分:1)

第一个你必须改变{{ print_r($v->stockdata()->get())->year }}这一行,删除print_r。在foreach循环中的下一个你可以做这样的事情

@foreach($stock as $one)
     {{ $one->stockadata()->first()->year }}
@endforeach

为了更好的解决方案,您应该检查是否isset $one->stockadata()->first() 并在那之后 - >年。最后代码应该是这样的

@foreach($stock as $one)
 {{ isset($one->stockadata()->first()) : $one->stockadata()->first()->year : 'Default' }}
@endforeach

答案 1 :(得分:0)

在任何关系上调用get()方法无论您有什么关系,都会收到收集。

至少有两种方法可以解决您的问题:
1. $v->stockdata->year
2. $v->stockdata()->first()->year

我建议你使用第一个,因为你的stockdata有1:1的关系。

祝你好运!

答案 2 :(得分:0)

因为它是one to one relation,你应该这样做:

@foreach ($stock as $v)
    {{ $v->stockdata->year }}
@endforeach

答案 3 :(得分:0)

例如:

Stock.php模型

class Stock extends Model
    {
        protected $primaryKey = 'id';

        function stockdata() {
       return $this->hasOne('App\StockDatas', 'id', 'stock_id');
    }

    public function getStock(){
         return Stock::with('stockdata')->get();
    }
}

在控制者中

 public function getstock(Stock $stock) {
    return view('vehicles.getstock', ['stock' => $stock->getStock]);
}

视图

@foreach ($stock as $k => $v)
     {{ $v->stockdata->year }}
@endforeach