2017-03-13 14 views
0

私は職人のカスタムコマンドを作成しました。handle()メソッドで私はユーザーについていくつかの情報を得る必要があります。職人のカスタムコマンドでモデル関係を取得できませんLaravel 5.4

私が実行します。

handle() { 
    $users = User::all(); 
    foreach($users as $user) { 
     $this->line($user->name); 
    } 
} 

それは動作しますが、私のようなものが必要です

handle() { 
    $users = User::all(); 
    foreach($users as $user) { 
     $this->line($user->summoner->summoner_id); 
    } 
} 

を、私は非オブジェクトのプロパティを取得するためにGETしよう。

コントローラで上記と同じコードを実行するとうまくいきます。

アイデアはありますか?

ユーザモデル:

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function summoner() { 
     return $this->hasOne('App\Summoner'); 
    } 

召喚モデル:上記metnioned @aynberとして

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Summoner extends Model 
{ 
    protected $table = 'summoners'; 
    public $timestamps = true; 

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

モデルと関係を表示します。 – aynber

+0

Ok、上に編集 –

+0

ログに '$ users'をダンプしようとします。変数を正確に把握してください。また、これは、いずれかのユーザーに電話番号がない場合に発生する可能性があります –

答えて

0

、DBフィールドuser場合。 summoner_idをNULLに設定すると、関連のないユーザーが表示されますSummoner

ですから、関係summoner有無をチェックしますQueryBuilderのwhereHas方法、使用することができます。

$users = User::whereHas('summoner')->get(); 
foreach($users as $user) { 
    $this->line($user->summoner->summoner_id); 
} 

それとも、すべての選択したユーザーの関係summonerのexistensを確認することができますが、このアプローチはから冗長データを選択することをDB(あなたは非NULL summoner_idフィールドを持つすべてのユーザーが必要な場合):

$users = User::all(); 
foreach($users as $user) { 
    if(empty($user->summoner)){ 
     continue; 
    } 
    $this->line($user->summoner->summoner_id); 
} 

あなたはwhereHas方法彼についての詳細な情報を見つけることができます再:


だけ奇妙なこと、つまりあなたは(私が得る場合は右)、非職人に「通常の」コントローラ言ったように同じコードがエラーなく実行されます。可能であれば、それはちょうど偶然です。非CLI(コマンドライン入力)コントローラーでコードをチェックしたとき、すべてのユーザーが召喚者を持っていた可能性があります。

+0

私の答えが役に立ったら、それを解決策としてマークして投票してください。 –

関連する問題