2016-04-13 18 views
0

5.1 Laravel uygulamasında çalışıyorum. Bu uygulamada Bussiness Model (ispanyolca olarak adlandırılmış Negocio) ve Kullanıcı Modeli arasında OnetoMany İlişkisi var. Kullanıcılarımı kaydettiğimde bir simge oluşturup e-posta uyumu üzerindeki belirteci kullanmak için kullanıcı tablosuna kaydederim.Sorunun giderilmesinden Eloquent RelationShip Laravel 5.1

Kullanıcı hesabı onayladığında, bir dizin oluşturmak için denetleyici tarafından alınan jetonu kullanmak istiyorum. Daha sonra kullanıcının 'public/negocios /' ile ilişkili olduğu işletmenin adı.

Yani userconfirmartion için benim denetleyicisi vardır:

Benim İş Modeli
public function emailConfirm($token) 
{ 
    try { 
     //getting the bussiness that user is related to 
     $negocio = App\Negocio::with(['user' => function ($query) use($token) { 
      $query->where('token', 'like', $token); 
     }])->firstOrFail()->folderProfile(); 

     //Then we activate the user account 
     $user = User::whereToken($token)->firstOrFail()->confirmEmail(); 
     return redirect('/login')->with('mensaje', '¡Su cuenta de usuario se ha activado, ahora puede iniciar sesión en su cuenta!'); 

    } catch (ModelNotFoundException $e) { 
     return redirect('/login')->with('mensaje', 'Ya se ha confirmado a este usuario, solo inicie sesión ¬¬'); 
    } 
} 

Ben dizinin adı olarak bussiness adı alınırken dizini oluşturmak için fonksiyonu var:

public function folderProfile() 
{ 
    $name = str_replace(' ', '', $this->nombre_negocio); 
    $ruta_a_public = public_path().'/negocios/'; 
    $ruta_a_public .= $name; 
    File::makeDirectory($ruta_a_public, $mode = 0777, true, true); 
} 

Sorun, php artisan tinker numaralı telefondaki kodu soruşturmaktır. Eloquent, sadece iş ile ilgili değil, veritabanına kaydedilen tüm iş bilgimi alır.

(iş modeline) 'dir başarısız parçası beklendiği gibi bana "sorgu" çalışması için en iyi yolu söyleyebilirdi eğer senden takdir ediyorum:

$negocio = App\Negocio::with(['user' => function ($query) use($token) { 
      $query->where('token', 'like', $token); 
     }])->firstOrFail()->folderProfile(); 

benim Negocio modelinde (ispanyolca bussiness modeli):

Ben https://laravel.com/docs/5.1/eloquent-relationships#querying-relations

DÜZENLEME okuduklarım üzerine dayalı

public function negocio() 
{ 
    return $this->belongsTo('App\Negocio', 'negocio', 'codigo_negocio'); 
} 

sayesinde çocuklar ... Bu uzun yazı için üzgünüm:

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

Ve Kullanıcı Modelibu var.

//First search for the user 
$user = App\User::where('token','like','%' . $token . '%')->first(); 

//Then search for the business 
$negocio = App\Negocio::where('user_id',$user->id)->first(); 

tablolar arasındaki ilişkileri tanımlamak unutmayın:

+0

Merhaba Elotgamu, Lütfen, kullanıcı tablosu ve iş modeli arasındaki gerçek ilişkiyi görmek için tablolarınız hakkında basit bir açıklama sağlamak için gönderinizi günceller misiniz? –

+0

Düzenlendi ...Kullanıcı ve İş modeli arasındaki model ilişkilerimi ekledim – elotgamu

cevap

0

Bu diffent mantık ama belki yardım bu. Bu arada

, buradan% unutmak:

$query->where('token', 'like', '%' . $token . '%'); 

Eğer tam Aynı şekilde arayan, bu kullanmalısınız:

Something::where('token',$token) 
+0

Evet Bu yaklaşımı da aldım, ama iş modelimin ** bir çok kullanıcısı var .. ve kullanıcı bir işletmeye ait. – elotgamu

+0

Bu yüzden İşi alamıyorum. Adını söylediğin gibi kesin bir belirti aramaya çalıştım ama kaydedilen tüm işlerimle bir Eloquent koleksiyonu elde ettim. Yani sorun hala var ... Cevapla ve bana yardım ettiğin için teşekkürler ... :) – elotgamu

+0

Sanırım modelin doğru değil, işte bir örnek: '$ this-> hasMany ('App \ Something ',' foreign_key ',' local_key ') Eğer ilk() veya find() yöntemini kullanırsanız, birden fazla işe geri dönemezsiniz. – szebasztian

0

ayrıca laravel belgelerinde https://laravel.com/docs/5.1/eloquent-relationships üzerinde okuduktan sonra Benim için çalışan ve beklenen kayıt alma yolu:

$negocio = App\Negocio::whereHas('user', function ($query) use($token) { 
      $query->where('token', $token); 
     })->firstOrFail()->folderProfile(); 

Bu şekilde I Jetonun sahibi ile ilgili doğru iş olsun ... Teşekkürler @selebasztian eloquent ORM üzerinde querys hakkında bazı yeni ipuçları için.