Php Laravel数据库查询
我正在laravel4中构建我的第一个db查询,但是我遇到了一些问题 我的目标是在用户登录后向他们显示站点警报。我得到一个错误,上面写着:“尝试获取非对象的属性” 我的模型:Php Laravel数据库查询,php,laravel,laravel-4,Php,Laravel,Laravel 4,我正在laravel4中构建我的第一个db查询,但是我遇到了一些问题 我的目标是在用户登录后向他们显示站点警报。我得到一个错误,上面写着:“尝试获取非对象的属性” 我的模型: class SiteAlert extends Eloquent { /** * The database table used by the model. * * @var string */ protected $table = 'sitealerts'; public function scopege
class SiteAlert extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'sitealerts';
public function scopegetSiteAlerts() {
$alert = DB::table('sitealerts')
->where('isActive', '=', '1')
->select('isActive', 'alertTitle', 'alertText', 'alertDate', 'created_at',
'alertStart', 'alertExpires')
->orderBy('created_at', 'desc')
->get();
return $alert;
}
}
我的控制器(注意:这是我的用户控制器,我的警报没有单独的控制器)
和我的视图文件(dashboard.blade.php)
@if(isset($alert))
您好,{{$contractor->contact_name;}
欢迎使用您的承包商Herpa仪表板。
您的帐户允许您查看与项目相关的信息。你可以继续进步,
上载文件、进行新的付款/打印收据、查看以前的付款,&;更多
@while($alert)
{{$alert->alertTitle}
{{$alert->alertDate}
{{$alert->alertText}
@结束时
@否则
您好,{{$contractor->contact_name;}
欢迎使用您的承包商Herpa仪表板。
您的帐户允许您查看与项目相关的信息。你可以继续进步,
上载文件、进行新的付款/打印收据、查看以前的付款,&;更多
@恩迪夫
我的猜测是,我没有正确设置控制器以访问$alert
任何帮助都将不胜感激。TIA错误是因为在视图中,当变量作为数组传递时,您将变量视为对象。通常,您不能在视图中访问模型,您应该在控制器中拥有所有的逻辑(就像您所做的那样),然后将数据作为数组通过
->with()
传递给视图
已更新
问题可能出在@而($alert)
中,请将其替换为以下内容:
@foreach ($alert as $a)
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<i class="icon-bullhorn"></i> {{$a->alertTitle}}
<span class="floatRight">
{{$a->alertDate}}
</span>
</h3>
</div>
<div class="panel-body">
{{$a->alertText}}
</div>
</div>
@endforeach
@foreach($a警报)
{{$a->alertTitle}
{{$a->alertDate}
{{$a->alertText}
@endforeach
您传递的一个对象似乎为空。您确定数据库中有给定id的数据吗?这里的问题是:
// this returns array of stdObjects
$alerts = DB::table('sitealerts')
->where('isActive', '=', '1')
->select('isActive', 'alertTitle', 'alertText', 'alertDate', 'created_at',
'alertStart', 'alertExpires')
->orderBy('created_at', 'desc')
->get();
return $alerts;
// then in your view you try to get property of array so replace:
@while($alert)
// with:
@foreach ($alerts as $alert) // in your controller use with('alerts',$alerts);
哪一行触发错误?@edvinas.me{{$alert->alertTitle}}行触发错误
@while($alert)
这怎么不总是正确的?这是因为$alert
为空。您不能在空的$alert
上调用->alertTitle
。请检查我的最新答案实际上您错了。如果您注意到,他正在使用命令get(),该命令将数据返回为object@edvinas.me成功了,现在效果很好。谢谢。@Alen我确实错过了这一点,但是关于在视图中使用模型的评论仍然适用。答案是Updated我认为可能也是这样,但数据库中确实有数据。所有行都有一个值。您正在将警报对象集合传递到视图中。您必须迭代这些集合的每个元素。。。使用foreach构造
@foreach ($alert as $a)
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<i class="icon-bullhorn"></i> {{$a->alertTitle}}
<span class="floatRight">
{{$a->alertDate}}
</span>
</h3>
</div>
<div class="panel-body">
{{$a->alertText}}
</div>
</div>
@endforeach
// this returns array of stdObjects
$alerts = DB::table('sitealerts')
->where('isActive', '=', '1')
->select('isActive', 'alertTitle', 'alertText', 'alertDate', 'created_at',
'alertStart', 'alertExpires')
->orderBy('created_at', 'desc')
->get();
return $alerts;
// then in your view you try to get property of array so replace:
@while($alert)
// with:
@foreach ($alerts as $alert) // in your controller use with('alerts',$alerts);