Laravel多个连接使用范围检查每个记录是否有值

时间:2017-08-30 23:05:50

标签: mysql laravel join eloquent

我有3个表,第一个是'事件'表,其中包含列:

id
showname
eventdate
office_id   //the office that made this
photo
user_id   //the user that saved the record
...

和其他一些专栏。

office_id是下面办公室的外键

第二个是'办事处'表

id
name
address
owner_id  //the user owner of Office
...

和其他一些专栏。

owner_id是以下用户中的外键

,第三个是'用户'表

id
name
...

和其他一些专栏。

现在我正在尝试索引视图文件来显示事件。

我使用事件模型中的范围来显示属于signed_in用户的事件。

public function scopeHasMyOffice($query, $me)
{
    return $query->join('offices', function ($join) use ($me) {    
        $join->on('events.foffice_id', '=', 'offices.id')
             ->where('owner_id', $me);
    });        
}

在控制器中,我编写了这段代码

public function myindex()
{
    $my = Auth::User()->id;

    if (!is_null($my))
    {
        $events = Event::HasMyOffice($my)->select('events.*')
                                         ->orderby('eventdate', 'desc')
                                         ->get();              
    }
    else
    {
        $events = NULL; 
    }    
}

可行并提供其所有者为用户连接的事件列表。

我还有另外两个列表显示州和城市的所有事件。

现在我想在每一行前面显示一个简单的“查看”按钮和一个按钮“编辑”,如果该事件属于所有者是用户登录的办公室 只有该用户可以选择编辑记录。

这是为每个办公室的一个用户(一个所有者)构建的。如果他们更多,我必须再次改变它。

无论如何,我现在想要编辑按钮,但仅针对用户所有者,正如我所解释的那样,需要一些帮助。

我认为添加到模型事件这个代码

是一个好主意
public function scopeInMyOffice($query, $me, $gid)
{
    return $query->join('offices', function ($join) use ($me) {
        $join->on('events.foffice_id', '=', 'office.id')
             ->where('owner_id', $me);
    })->where('event.id', $gid);
}

检查每一行是否发生但是没有用。

@if( count($event->InMyOffice(Auth::user()->id, $event->id)) > 0)
   <a href="{{ route('event.edit', [$event->id]) }}" class="btn btn-xs btn-info">Edit</a>
@endif

所以我被困住了,需要一些帮助。

0 个答案:

没有答案