我有两个表,一个叫做“事件” ,另一个叫做“依赖”,一个依赖可以有几个事件,也就是它们之间的关系,我想做的是显示一个事件的数据,同时也显示数据相关的依赖a。
这是我带来活动的控制器:
class WelcomeController extends Controller
{
public function inicio(){
$events = Event::orderBy('id', 'DESC')->where('status', 'PUBLISHED')->paginate(3);
return view('welcome', compact('events'));
}
这是事件模型:
class Event extends Model
{
protected $table = 'events';
protected $fillable = [
'admin_id', 'dependence_id', 'place_id', 'name', 'slug', 'excerpt', 'body', 'status', 'file'
];
public function dependences(){
return $this->belongsTo('App\Dependence', 'dependence_id');
}
依赖模型:
class Dependence extends Model
{
protected $table = "dependences";
protected $fillable = [
'name', 'slug'
];
public function events(){
return $this->hasMany('App\Event');
}
所以我尝试在视图中显示它:
@foreach($event->dependences as $dependence)
<a href="#">
{{$dependence->name}}
</a>
@endforeach
但我收到此错误: 尝试获取非对象的属性“名称”
路线很好,但我不知道是什么问题,希望您的帮助,非常感谢。
这很简单,您只是混淆了Event
dependences
模型返回的数据类型,我将解释如何:当您的模型中有一个函数链接到另一个函数时,您必须考虑返回的数据类型,在您的情况下,您有:
这很好,因为根据您的解释,一个事件属于一个依赖,一个依赖有几个事件,所以当做
belongsTo
(翻译为:属于)时,您返回的是来自Dependenceobjeto
模型的。在您的依赖模型中会发生类似的事情:
但是在这种情况下,您有一个
hasMany
(翻译为:它有很多),此函数array
从Event返回一个。到目前为止,解释和真相一切都很好,但是......
现在的解决方案
假设它
$event
是一个对象,那么它$event->dependences
返回一个对象,它不能被foreach遍历,所以应该做的是:在另一种情况下
$dependence->events
返回一个数组,你可以使用一个数组:到目前为止的解决方案,但是......
现在提示:
当你这样做时:
你不清楚你和它有什么关系,这或多或少是有规律的,因为 Laravel 如此直观和高效,它把它们都带走了。
我建议您始终使用
with
,此功能允许我们决定我们将在查询中提取哪些关系。有
$events
以下不应该失败不知道你有没有试过,但是我觉得在视图中,你需要它是一个函数,也就是foreach应该是这样的: