2016-10-20 5 views
0

私は、ユーザー、laravel 5.3で雄弁な関係にデータを格納してアクセスする方法は?

users table 
    id 
    mobile 
    name 

devices 
    id 
    user_id 
    device 
    ip 
    active 

1ユーザが質問が例えば特定のユーザー のための装置を格納し、アクセスする方法である今

ログイン元となる複数のデバイスを持つことができ、次のデータベーステーブルの構造を持っていますsam( 'id'、1)には、android( 'user_id'、1)とiphone( 'user_id'、1)の2つのデバイスがあります。だから、ユーザーが来ると私は携帯電話番号を持ってログインします。ユーザーテーブルから特定のユーザーのIDを取得するには、私は以前のクエリから取得したユーザーのIDでデバイステーブルの別のクエリを実行し、私はデバイスのデータをralatedします。

しかし、私は間違っていると知っています。他の方法となるでしょう。私はユーザーと関連するデバイスを格納するときに起こった。最初に私はユーザーを格納し、次に同じユーザーのために私はデバイスを格納するIDをフェッチすることによって。

これは私のUser.phpモデルです

class User extends Model 
{ 
    protected $fillable = ['mobile','name']; 

    public function device(){ 

    $this->hasMany('App\Device','tempuser_id'); 
    } 
} 

私は、多くの関係に説得力のいずれかを使用してこれに対処する方法を教えてください。モデルで

答えて

1

public function devices() 
{ 
    return $this->hasMany('App\Device','user_id', 'id'); 
} 

追加デバイスユーザーに

$user->devices()->save($device); 

デバイスは

foreach($user->devices as $device) 
{ 
    // device here 
} 
+0

を書く私は、コントローラ – sam

+0

公共機能のデモ(){ \t $ユーザ=新しいユーザーにこれをしませんでした。 \t foreach($ user-> $ devicesというデバイス) \t \t { \t \t return $ device; \t \t} } – sam

+0

エラーが発生しました。リレーションシップメソッドは、イルミネイト\データベース\エレロクェント\リレーション\リレーションのオブジェクトを返す必要があります。 – sam

1

特定のユーザーのデバイスを保存するには、Getは、使用することができます

public function add(Request $request){ 
    $device= new \App\Device; 
    $device->user_id = $request->user()->id; 
    $device->device = $request->device; 
    $device->ip = $request->ip; 
    $device->active =$request->active; 
    $devices->save(); 
} 

そしてユーザーのためのデバイスを取得するために、あなたのコントローラに

$devices = \App\User::find(Auth::user()->id)->devices; 
+0

しかし、もし私がユーザのIDを持っていないなら、ユーザーとそれに基づいて私は特定のユーザーのIDを取得します。ここでは、あなたはデバイスを保存する時にどんなIDも言及していませんでした。 – sam

+0

まず、データの保存中にidを渡す必要はありません。なぜなら、それはautoincrementのプロパティを持つ必要があるからです。ユーザーの携帯電話番号を持つデバイスにアクセスするには、 '$ devices = \ App \ User ::( 'mobile'、 'mobile-number') - > first() - > devices; ' –

+0

'既にユーザーテーブルにあり、そのユーザーのために後でデバイスを保存しています。だから私はどのようにしてidについて知ることができますか? – sam

関連する問題