2016-04-22 3 views
0

Ich habe mehrere Datenbanken. Für Benutzer, Datensätze usw. habe ich die Benutzerdatenbank aus mehreren App-Gründen getrennt.Laravel. Benutzerregistrierung in einer anderen Datenbank

heres mein database.php

'default' => 'main_db', 

'connections' => [ 
    'auth_db' => [ 
     'driver' => 'sqlsrv', 
     'host'  => env('DB_HOST', 'MYLAPTOP\SQLEXPRESS'), 
     'database' => env('DB_DATABASE', 'auth_db'), 
     'username' => env('DB_USERNAME', 'sa'), 
     'password' => env('DB_PASSWORD', '1234'), 
     'charset' => 'utf8', 
     'prefix' => '', 
    ], 
    'main_db' => [ 
     'driver' => 'sqlsrv', 
     'host'  => env('DB_HOST', 'MYLAPTOP\SQLEXPRESS'), 
     'database' => env('DB_DATABASE', 'main_db'), 
     'username' => env('DB_USERNAME', 'sa'), 
     'password' => env('DB_PASSWORD', '1234'), 
     'charset' => 'utf8', 
     'prefix' => '', 
    ], 
], 

User.php Modell.

class User extends Authenticatable 
{ 

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

    protected $connection = 'auth_db'; 

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

AuthController.php, machte nur wenige Änderungen nach php Handwerker machen: Auth

class AuthController extends Controller 
    { 


    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 


    protected $redirectTo = '/'; 

    protected $username = 'username'; 

    public function __construct() 
    { 
     $this->middleware($this->guestMiddleware(), ['except' => 'logout']); 
    } 


    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'username' => 'required', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|min:4|confirmed', 
     ]); 
    } 


    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

Problem ist, wenn ich hinzufügen, neue Benutzer über/registrieren Route .. Es wird sagen Objekt nicht ‚Benutzer gefunden ". Weil die Tabelle users in der 'auth_db' ist und es so aussieht, als ob die Registrierung von laravel immer noch auf 'main_db' zeigt, obwohl $ connection bereits im Modell vorhanden ist und auf die Datenbank zeigt, wo die Benutzertabelle existiert.

Normale Abfrage, eloquent und Login-Funktion arbeitet reibungslos .. Gerade dieses Register mich ausgeflippt ..

+0

u kann Ihr Modell und Steuerteil für ‚Benutzerregistrierung‘ in Ihrer Frage enthalten? – Sunil

+0

@Sunil dort ist es ... machte nur ein paar Änderungen nach dem php Handwerker machen: auth ... –

Antwort

1

diese Methode einmal versuchen:

<?php 
return array(

'default' => 'mysql', 

'connections' => array(

    # Our primary database connection 
    'mysql' => array(
     'driver' => 'mysql', 
     'host'  => 'host1', 
     'database' => 'database1', 
     'username' => 'user1', 
     'password' => 'pass1' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

    # Our secondary database connection 
    'mysql2' => array(
     'driver' => 'mysql', 
     'host'  => 'host2', 
     'database' => 'database2', 
     'username' => 'user2', 
     'password' => 'pass2' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 
), 
); 

In Controller:

$users = DB::connection('mysql2')->create([ 
     'name' => $data['name'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

Eloquent

Sie können auch die Verbindung definieren als auch in Ihrem Eloquent Modelle verwenden!

class SomeModel extends Eloquent { 

protected $connection = 'mysql2'; 

} 

Sie können auch die Verbindung zur Laufzeit über die SetConnection Methode definieren

<?php 

class SomeController extends BaseController { 

public function someMethod() 
{ 
    $someModel = new SomeModel; 

    $someModel->setConnection('mysql2'); 

} 

} 
+0

wahrscheinlich die beste Idee wird. benutze nicht die standard/register-route und mache mein eigenes manuelles registrierungsmodul ... aber trotzdem danke .. deine antwort für controller erleuchte mich .. –

+0

Good Luck bro :) – Sunil

Verwandte Themen