【问题标题】:How to check eloquent relationship如何检查雄辩的关系
【发布时间】:2017-10-12 15:41:07
【问题描述】:

所以我需要检查 User 模型中的现有关系,并制作 if 语句以向具有 Company 关系的用户授予路由访问权限。

用户.php

public function company(){
    return $this->belongsTo('App\Company', 'user_id');
}

公司.php

public function user(){
    return $this->hasMany('App\User') ;
}

ListingController.php

public function create(User $user){
    if(count($user->company) > 0){
    return view('listings.create');
    } else{
    return redirect()->back();
    }
}

导航视图

@inject('user', 'App\User')
    @if(count($user->company) > 0)
      <li><a href="{{route('listings.create', [$area])}}">Add Listing</a></li>
    @endif

在 web.php 中列出路由

Route::group(['prefix' => '/listing', 'namespace' => 'Listing'], function (){
//        Route::get('/me', 'ListingController@userListingsView')->name('listings.index');
        Route::get('/favourites', 'ListingFavoriteController@index')->name('listings.favourites.index');
        Route::post('/{listing}/favourites', 'ListingFavoriteController@store')->name('listings.favourites.store');
        Route::delete('/{listing}/favourites', 'ListingFavoriteController@destroy')->name('listings.favourites.destroy');
        Route::post('{listing}/contact', 'ListingContactController@store')->name('listings.contact.store');

        Route::get('{listing}/share', 'ListingShareController@index')->name('listings.share.index');
        Route::post('{listing}/share', 'ListingShareController@store')->name('listings.share.store');

        Route::group(['middleware' => 'auth'], function (){
            Route::get('/create', 'ListingController@create')->name('listings.create');
            Route::post('/', 'ListingController@store')->name('listings.store');
            Route::get('{listing}/edit', 'ListingController@edit')->name('listings.edit');
            Route::patch('{listing}', 'ListingController@update')->name('listings.update');
        });

    });

URL :: project.dev/{area}/listing/create

现在我不确定我与用户之间的公司关系是否正确,当我使用具有公司关系的用户登录时,它仍然会将我重定向回来,而不是创建列表路线。

【问题讨论】:

  • 在导航视图中,$area 到底是什么?

标签: php mysql laravel eloquent relationship


【解决方案1】:

尝试空函数而不是计数

public function create(User $user) {
    if (!empty($user->company)) {
        return view('listings.create');
    } else {
        return redirect()->back();
    }
}

更新路线(创建线)到

Route::get('{user}/create', 'ListingController@create')->name('listings.create');

然后在您的 URL 中添加用户 ID

URL :: project.dev/{area}/listing/{user}/create

导航视图

@inject('user', 'App\User')
    @if(count($user->company) > 0)
      <li><a href="{{route('listings.create', [$area, $user->id])}}">Add Listing</a></li>
    @endif

【讨论】:

  • hmm.. 仍然会重定向回来,即使帐户与公司有关系。
  • 确保数据不为空的用户对象也通过这个命令检查你的路由 php artisan route:list
  • 你可能需要这个 php artisan route:cache
  • 我做了路由:列表和路由:缓存,一切似乎都很好,但仍然无法正常工作。但是现在我做了 dd() 而不是重定向回来并得到了这个。 #relations: array:1 [▼ "company" => null ]
  • 尝试在 if 语句之前打印 $user obj
【解决方案2】:

好吧,你为什么不试试这个:

在导航视图中:

@inject('user', 'App\User')
    @if(count($user->company) > 0)
      <li><a href="{{route('listings.create', ['id' => $user->id])}}">Add Listing</a></li>
    @endif

在你的 web.php 中:

Route::get('/create/{id}', 'ListingController@create')->name('listings.create');

在您的列表控制器中:

public function create($id){

    $user = User::find($id);

    if(count($user->company) > 0){
    return view('listings.create');
    } else{
    return redirect()->back();
    }
}

【讨论】:

    【解决方案3】:

    我能够以这种方式修复解决方案。我的朋友帮助了我,非常感谢他。无论如何,这是解决方案。

    在我的navigation.blade.php 中,我做了这个if 条件来查找具有公司关系的用户。

                       @if(count(\App\User::where(['id' => Auth::user()->id])->with('company')->first()->company) > 0 )
                            <li>
                                <a href="{{route('listings.create', [$area])}}">Lisa kuulutus</a>
                            </li>
                        @endif
    

    发现里面Company.php模型关系是belongsTo而不是hasMany。

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

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2021-06-17
      • 2016-07-01
      • 1970-01-01
      • 2021-12-15
      • 2016-02-26
      • 2018-12-09
      相关资源
      最近更新 更多