我正在尝试在laravel模板中获取模型之间的关系。 我想将产品字段与广告相对应。
这是我的AdController:
public function ads(Request $request)
{
$this->adRepository->pushCriteria(new RequestCriteria($request));
$hash = Auth::user()->environment_hash;
$ads = $this->adRepository->findByHash($hash);
return view('ads.index')
->with('ads', $ads);
}
这是我如何解析我的刀片模板:
@foreach($ads as $ad)
<tr>
<td>{!! $ad->product->name !!}</td>
</tr>
@endforeach
但我一直收到这个错误:
Trying to get property of non-object
这是adRepository文件:
public function findByHash($hash = null)
{
$model = $this->model;
if($hash)
$this->model->where('environment_hash', $hash);
else
$this->model->where('environment_hash', Auth::user()->environment_hash);
return $model;
}
这是我的广告模型:Ad.php
<?php
namespace App\Models;
use Eloquent as Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Ad extends Model
{
public function product()
{
return $this->belongsTo(Product::class);
}
}
这是我的广告表:
id
product_id
environment_hash
我的产品表:
id
environment_hash
name
代码有什么问题?
答案 0 :(得分:1)
不确定,但必须有一些广告在您的数据库中没有产品。所以这可能是你得到错误的原因。确保您的所有广告都在数据库中包含相关产品。
您可以通过运行以下代码来测试它:
@foreach($ads as $ad) <tr> <td>Test {!! $ad->product !!}</td> </tr> @endforeach
如果你得到这样的结果:
Test some_name
Test
Test some_another_name
然后确认某些广告没有相关产品。
如果是这种情况,则需要在访问产品属性之前进行if()
检查。
<强>更新强>
问题是您get()
中遗失了findByHash()
。
它应该是:
public function findByHash($hash = null)
{
$model = $this->model;
if($hash)
$this->model->where('environment_hash', $hash);
else
$this->model->where('environment_hash', Auth::user()->environment_hash);
return $model->get();
}