所以我尝试使用belongsTo
和hasMany
“连接”两个表,但似乎不起作用...我将在下面链接我的代码,如果您需要了解其他任何问题,请随时询问!
页面.通知
<section class="all-notifications">
@each('partials.notification', $sent_notifications, 'notification')
@each('partials.notification', $received_notifications, 'notification')
</section>
部分通知
<div class="singular-notification">
<div class="notification-title">
<a href="/event/{{ $notification->event->id }}">
{{ $notification->event->name }}
</a>
</div>
</div>
查询语句
CREATE TABLE event (
id SERIAL PRIMARY KEY,
owner_id INT NOT NULL REFERENCES users(id),
name TEXT NOT NULL,
description TEXT NOT NULL,
tag TEXT,
start_datetime TIMESTAMP NOT NULL CHECK (start_datetime >= now()),
end_datetime TIMESTAMP NOT NULL CHECK (end_datetime > start_datetime),
price FLOAT DEFAULT 0.0,
max_capacity INT DEFAULT NULL,
attendee_counter INT DEFAULT 0 CHECK (attendee_counter <= max_capacity AND attendee_counter >= 0),
location TEXT NOT NULL,
image TEXT NOT NULL,
is_private BOOLEAN DEFAULT false,
is_full BOOLEAN DEFAULT false
);
CREATE TABLE notification (
id SERIAL PRIMARY KEY,
event_id INT NOT NULL REFERENCES event(id),
sent_users_id INT NOT NULL REFERENCES users(id) CHECK (sent_users_id != receiver_users_id),
receiver_users_id INT NOT NULL REFERENCES users(id),
status notification_status NOT NULL
);
通知控制器.php
public function list($id)
{
if (!Auth::check()) return redirect('/login');
$sent_notifications = DB::table('notification')->where('sent_users_id', $id)->orderBy('id')->get();
$received_notifications = DB::table('notification')->where('receiver_users_id', $id)->orderBy('id')->get();
return view('pages.notifications', ['sent_notifications' => $sent_notifications, 'received_notifications' => $received_notifications]);
}
事件.php
public function notifications() {
return $this->hasMany('App\Models\Notification');
}
public function notification() {
return $this->hasMany(Notification::class);
}
通知.php
public function event() {
return $this->belongsTo('App\Models\Event');
}
public function events() {
return $this->belongsTo(Event::class);
}
我得到的错误是Undefined property: stdClass::$event
,我似乎无法绕过它...请让我知道,如果有一个简单的修复。
非常感谢您抽出时间
2条答案
按热度按时间zwghvu4y1#
当你使用
DB::table()
时,你会得到StdClass的示例作为结果(或StdClass的数组),所以你不能使用在你的模型Notification类中声明的方法。需要从模型开始查询
这将为您提供一个Notification::类示例的集合,您可以使用声明的关系以及模型类中声明的任何方法。
hfyxw5xn2#
始终使用最佳代码实践,始终使用对您有帮助的代码,而不是会造成障碍的代码。
如果你有1:n的关系,比如
$event
有很多$notifications
,在名字中使用这些单数和复数删除那些重复的方法。我在这里写的是被认为是好的实践。更多好的建议,你也可以找到here。