Теория:Доступ к информации о сводных таблицах
Пользователи могут посещать множество мероприятий, и многие мероприятия могут посещать многие пользователи. Таким образом, у меня есть два отношения «многие ко многим» в моих моделях, привязанные к сводной таблице (event_user). При посещении каждого события я хочу иметь доступ к данным сводной таблицы (event_user), чтобы узнать, уже ли они посещают.
event_user: --id --event_id --user_id
Например, мои данные семена:
пользователя 1 посещение как событие 2 и 3. Я хочу, чтобы иметь возможность показать это в представлении.
Ближайший у меня есть (логически):
public function index()
{
$id = Auth::user()->id;
$attending = myApp\Event::find($id)->event;
var_dump($attending); **But this var_dump returns NULL, but $id returns the correct ID.**
$events = myApp\Event::all();
$this->layout->content = View::make('events.index')->with('events', $events);
}
Моя цель состоит в том, чтобы отключить кнопку «ПРИСУТСТВУЙТЕ», на любом мероприятии, где они уже лечащие, только оставив ПРИСУТСТВУЙТЕ-состояние события доступны !
Любая помощь была бы чрезвычайно оценена. Заранее спасибо.
Любой дополнительный код, который вы можете найти необходимо:
События Модель: Модель
<?php
namespace myApp;
use Eloquent;
class Event extends Eloquent {
public function consultant()
{
return $this->belongsToMany('myApp\Consultant');
}
public function location()
{
return $this->belongsToMany('myApp\Location');
}
public function user()
{
return $this->belongsToMany('myApp\User');
}
}
Пользователь:
<?php
namespace myApp;
use Eloquent;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
public function event()
{
return $this->belongsToMany('Event');
}
public function practice()
{
return $this->belongToMany('Practice');
}
index.blade.php (с указанием список событий)
<div class="panel panel-success">
<!-- Default panel contents -->
<div class="panel-heading"><strong>Events</strong></div>
<!-- <div class="panel-body">
</div> -->
<!-- Table -->
<table class="table">
<thead>
<tr>
<th>Title</th>
<th>Date</th>
<th>Presenter</th>
<th>Location</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($events as $event)
<tr>
<td>{{ $event->title }}</td>
<td>{{ date("j F Y", strtotime($event->date)) }}</td>
<td>{{ $event->consultant()->first()->title }} {{ $event->consultant()->first()->surname }}</td>
<td>{{ $event->location()->first()->address_1 }}</td>
<td><button type="button" class="btn btn-info">Attend</button></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</table>
Какое замечательное объяснение, я не могу вас отблагодарить (это ясно для начинающего, как я!) Пространство имен было слабым с моей стороны, мое плохое. Использование события $ attending = $ user->; возвращает все в JSON .. Включая все данные о пользователе, хешированный пароль и т. Д. Однако, вовремя, я пытался решить это сам и это, казалось, привело к двум правильным событиям, которые пользователь посещает: $ attending = myApp \ Event :: has ('user') -> get(); Но я теперь изо всех сил пытаюсь сопоставить их в цикле foreach моего взгляда, чтобы пересечь матч, независимо от того, посещают ли они! – Ben
Без проблем, я рад, что это помогло. Проблема с '$ attending = myApp \ Event :: has ('user') -> get();' заключается в том, что она вернет события, у которых есть соответствующий пользователь, даже если пользователь не является текущим. Если вы повторяете содержимое $ attending, то Laravel автоматически сделает его строкой JSON, вместо этого используйте 'dd ($ attending);'. – ollieread
Я изменил свой ответ, чтобы включить способ его проверки – ollieread