2017-06-12 68 views
0

我試圖通過user_id從數據庫中檢索數據。我的視圖顯示這個錯誤:嘗試獲取非對象的屬性。 dd()返回null。dd()當我嘗試按用戶ID查找數據時返回空值

這是我的控制器:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\User; 
use App\Complain; 
use App\Feedback; 
use App\Item; 
use Illuminate\Support\Facades\Redirect; 
use Session; 
use Auth; 

class ProfileController extends Controller 
{ 
    public function profile($id){ 

     $complain = Complain::find($id); 
     dd($complain); 
     return view('user.profile')->with(['complains' => User::find($id)->complains]); 

    } 
} 

這是我的用戶模型:

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
use Illuminate\Database\Eloquent\Model; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'surname', 'regnumber', 'course', 'department', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

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

這是我投訴模型。

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Complain extends Model 
{ 
    protected $fillable = [ 
     'user_id', 'title', 'body', 'name', 'regnumber' 
    ]; 

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

這是我的看法:

@foreach($complains as $complain) 
    <div> 
    <h3 class="operator-complain-title">Title: </h3> 
    <p>{{ $complain->title }}</p> 
    <h3 class="operator-complain-title">Complain:</h3> 
    <p>{{ $complain->body }}</p> 
    </div> 
    <hr> 
@endforeach 

的user_id是一個外鍵。如何成功顯示基於user_id的投訴(數據)?

這是我的用戶表:

id | name | email | password 
7 John email password 

這是我的抱怨表:

id | user_id | title  | body 
5  7  complain 1 Complain 1 

任何人只要有想法,請分享。

+2

$抱怨=抱怨::在哪裏( 'USER_ID',$ ID) - >獲得(); – kfx9

回答

0

你會首先嚐試檢查的對象是試圖使用它像

<?php 
$var = 0; 

// Evaluates to true because $var is empty 
if (empty($var)) { 
    echo '$var is either 0, empty, or not set at all'; 
} 

// Evaluates as true because $var is set 
if (isset($var)) { 
    echo '$var is set even though it is empty'; 
} 
?> 
0
public function profile($id) 

應該

public function profile(Request $request) 

而且在口才

$complain = Complain::find($request->id); 
之前null或空

或者從段中獲取查詢。例如域/ ID/=從塞1號

$complain = Complain::find($request->segment(1)); 
+0

看起來像你沒有深究問題,以瞭解爲什麼示例沒有問題。看到Marting試圖通過提供代表用戶ID的'$ id'來獲得抱怨。如果你熟悉雄辯你必須明白'find'通過主鍵而不是相關領域。 – num8er

+0

@ num8er從控制器。 'dd($抱怨);'查看之前。對於這種情況'$ id'爲空。所以運營商需要知道$ id值 – huhu

+0

他不檢查'$ id',他檢查'$抱怨'所以'$ id = 7',當然'$抱怨== null' – num8er

2

據我瞭解你想獲得ID用戶$id抱怨。

這樣做Complain::find($id)不會返回用戶的抱怨,因爲找到了id字段。

但你想得到user_id字段的抱怨。

因此,對於這種情況下:Complain::whereUserId($id)->get()



檢查這一項(建議時,你要告訴用戶的數據,它的抱怨):

public function profile(Request $request, $id){ 
    $User = User::with(['complains'])->find($id); 
    if(!$User) return abort(404, 'User with id:'.$id.' not found'); 

    return view('user.profile')->with(['user' => $User, 'complains' => $User->complains]); 
} 

或這一個(如果你」重新將展示笙歌只):

public function profile(Request $request, $id){ 
    $complains = Complain::whereUserId($id)->get(); 
    if(!$complains) return abort(404, 'No complains for user (id:'.$id.') found'); 

    return view('user.profile')->with(['complains' => $complains]); 
} 



$id情況的用戶名:

public function profile(Request $request, $name){ 
    $User = User::with(['complains'])->whereName($name)->first(); 
    if(!$User) return abort(404, 'User with name:'.$name.' not found'); 

    return view('user.profile')->with(['user' => $User, 'complains' => $User->complains]); 
} 
+0

第一個解決方案返回這個:試圖獲取非對象的屬性。指向這個:return view('user.profile') - > with(['complains'=> $ User-> complains]);第二種解決方案返回我的視圖,但不會從表格投訴中輸出抱怨。 – Martin

+0

看起來像你不通過'7'作爲用戶的ID? – num8er

+0

@Martin檢查我的更新回答 – num8er

相關問題