如何在主视图中传递用户关系

时间:2019-02-03 00:57:07

标签: php laravel

我有2张桌子:

用户表:

  • id
  • 名字
  • 等。

交易表:

  • id
  • user_id
  • 等。

我正在尝试检查用户ID是否与“交易”表中的user_id相匹配。

我需要从主视图执行此操作。

我所拥有的:

用户模型:

public function transactions() {
    return $this->hasMany(Transaction::class);
}

交易模型:

use App\User; ...

public function user() {
    return $this->belongsTo(User::class);
}

家庭控制器:

public function index()
{
    $currentuserid = Auth::user()->id;
    $transactions = DB::table('transactions')->WHERE($currentuserid , '=','user_id' );

   return view('home');

}

主视图:

@if ($transactions == true)
 //Do stuff
@else
 //Do other stuff
@endif

即使trueAuth id不匹配,以下内容仍会返回Transaction user_id

我还认为我可以基于关系来执行if语句,但是没有运气:

public function index()
{
   return view('home');
}
-------------
@if (Auth::user()->id == (Auth::user()->transactions->user_id))

更新:如果与user_id和'auth id'不匹配,则使用以下代码错误。在视图中不返回不匹配。如果iduser_id匹配,则返回Match。

    public function index()
    {
        $currentUserId = Auth::user()->id;
        $transactions = Transaction::where('user_id','=',$currentUserId)->get();
        return view('home', compact('transactions'));

    }
@foreach ($transactions as $transaction)

  @if($transaction->user_id == Auth::user()->id)
  Match
  @elseif ($transaction->user_id != Auth::user()->id)
  Mismatch
  @endif

@endforeach  

1 个答案:

答案 0 :(得分:-1)

在您的控制器中,$transactions变量接收给定表的查询构建器实例,而不仅仅是集合。您还忘记了将此变量发送到视图。如果要获取集合,则应使用get()方法,然后像这样循环它们:

控制器

$transactions = Transaction::where('user_id','=',$currentUserId)->get();
return view('home', compact('transactions'));

查看

@foreach($transactions as $transaction)
{
  if($transaction->user_id == Auth::user()->id)
  // do something
  else
  // do something
}
@endforeach

在这种情况下,我们甚至不需要使用此if()来检查事务是否属于用户,因为我们已经在控制器中做到了。