根据https://laravel.com/docs/5.2/queries#joins文档,我已加入我的控制器文件。
但是我想从我的视图文件中的对象中获取数据。但它显示错误!
我的Routers.propTypes = {
history: PropTypes.object.isRequired
}
文件
PagesController
我无法从我的视图文件
中的$storages=DB::table('storages')
->join('dealers_of_distributors', 'storages.distributorId', '=', 'dealers_of_distributors.distributorId')
->select('storages.*', 'dealers_of_distributors.dealerId')
->get();
return views('pages.home')->withStorages($storages);
对象中获取数据
我的Storages
文件
views
我看到的第一个错误:
@if($storages->isEmpty())
<li>No Storage!</li>
@else
@foreach($storages as $stg)
<li>{{ $stg->name }}</li>
<li>{{ $stg->distributor->name }}</li> //I've done implemented distributor() function inside storage moel
@foreach($stg->dealerId as $dealer) //multiple dealers for 1 storage
<li>{{ $dealerId }}</li>
@endforeach
@endforeach
@endif
我该如何解决?
答案 0 :(得分:0)
我们使用DB::table('table_name')->get();
它将返回一个数组而不是一个对象。如果你想拥有一个模型对象,你应该使用像Storage::get();
答案 1 :(得分:0)
在Laravel 5.2及其他版本之前,在QueryBuilder
实例上调用get()
将返回array
而不是Collection
。这就是为什么你的代码在调用这一行时会抛出错误的原因:
$storages->isEmpty()
在您的代码示例中,$storages
是array
,因此没有isEmpty()
方法。如果您使用QueryBuilder,结果将是一个平面数组,因此无法一次查询多个dealers_of_distributors
条记录。
最简单的解决方案是使用Eloquent。
首先,您需要一个Storage
模型。在其中,添加dealersOfDistributors()
方法以定义与dealers_of_distributors
表的one-to-many关系。
<?php
// App/Storage.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Storage extends Model
{
protected $table = 'storages';
public function dealersOfDistributors()
{
return $this->hasMany(DealersOfDistributor::class, 'distributorId', 'distributorId');
}
}
接下来,您还需要DealersOfDistributor
型号:
<?php
// App/DealersOfDistributor.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class DealersOfDistributor extends Model
{
protected $table = 'dealers_of_distributors';
}
最后,您可以轻松查询storages
表和eager loading与dealers_of_distributors
的关系:
$storages = App\Storage::with('dealersOfDistributors')->get();
return views('pages.home')->withStorages($storages);
现在,在您的视图中,您可以将$storages
数据视为Collection
Storage
模型:{/ p>
@if($storages->isEmpty())
<li>No Storage!</li>
@else
@foreach($storages as $storage)
<li>{{ $storage->name }}</li>
@foreach($storage->dealersOfDistributors as $dealer)
<li>{{ $dealer->dealerId }}</li>
@endforeach
@endforeach
@endif
希望这有帮助!