所以我需要检查User模型中的现有关系,并使if语句为具有Company关系的用户提供路由访问。
User.php
public function company(){
return $this->belongsTo('App\Company', 'user_id');
}
Company.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
现在我不确定用户之间的公司关系是否正确,当我与有公司关系的用户登录时,它仍然会重定向我,而不是创建列表路线。
答案 0 :(得分:0)
尝试空函数而不是计数
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');
然后在您的网址中添加用户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
答案 1 :(得分:0)
好的,为什么不试试这个:
在导航视图中:
@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');
在你的ListingController中:
public function create($id){
$user = User::find($id);
if(count($user->company) > 0){
return view('listings.create');
} else{
return redirect()->back();
}
}
答案 2 :(得分:0)
我能够以这种方式修复解决方案。我的朋友帮助了我,非常感谢他。无论如何,这里是解决方案。
在我的navigation.blade.php中,如果找到具有公司关系的用户,我就会这样做。
@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);
}