2015-12-01 4 views
2

Я хочу изменить имя таблицы в зависимости от того, какой пользователь является Auth.Имя таблицы модели Laravel с переменной

Почему? Потому что, когда я добавляю дилера, я создаю клиента базы данных для этого дилера, а имя данных - d. $ Dealer_id.clients. Таким образом, пользователю необходимо добавить клиента в таблицу, связанную с собственным дилером.

Я попытался с устанавливаемым():

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Auth; 

class Client extends Model 
{ 
    public function setTable($table) 
    { 
     $this->table = 'd1clients'; 
     return $this; 
    } 
    protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence']; 
} 

Но это не спасают клиента к столу. И это:

'diclients' 

Должно быть так:

'd'.Auth::user()->dealer_id.'clients' 

Я также попробовал эту вещь:

$globalDealerId = Auth::user()->dealer_id; 
protected $table = 'd'.$globalDealerId.'clients'; 
protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence']; 

документация сказал, что Устанавливаемое должно работать, но я не знаю, что я сделал неправильно ...

+0

Если это '$ this-> table = 'd1clients';' be '$ this-> table = $ table;'? А затем запустите 'setTable ($ dealer_id);' – VIDesignz

+0

какие ошибки вы получаете? вы можете посмотреть на запрос, который красноречивый делает? –

+0

Я пытаюсь найти этот запрос. Но я не знаю, где его найти. –

ответ

1

Я нашел проблему. Существует, как это работает:

Модель должен иметь функцию в нем:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Client extends Model 
{ 
    public function setTable($table) 
    { 
     $this->table = $table; 
     return $this; 
    } 
    protected $fillable = ['dealer_id', 'user_id', 'type', 'first_name', 'last_name', 'phone', 'cellphone', 'email', 'stock', 'source', 'civic', 'road', 'city', 'province', 'country', 'postal_code', 'birth_date', 'driving_liscence']; 
} 

Важной частью является этот:

public function setTable($table) 
{ 
    $this->table = $table; 
    return $this; 
} 

Тогда, я туда, куда я добавляю клиента, в этом случае клиент добавляется в базу данных в контроллере. Так что вы идете, и вы делаете это:

public function store(Request $request) 
{ 
    $client = new Client; 
    $client -> setTable('d'.Auth::user()->id.'clients'); 
    $client -> dealer_id = Auth::user()->dealer_id; 
    $client -> user_id  = Auth::user()->id; 
    $client -> type   = Request::get('type'); 
    $client -> first_name = Request::get('first_name'); 
    $client -> last_name = Request::get('last_name'); 
    $client -> phone  = Request::get('phone'); 
    $client -> cellphone = Request::get('cellphone'); 
    $client -> email  = Request::get('email'); 
    $client -> city   = Request::get('city'); 
    $client -> stock  = Request::get('stock'); 
    $client -> source  = Request::get('source'); 
    $client -> save(); 

важная линия это одна:

$client -> setTable('d'.Auth::user()->id.'clients'); 

Не забудьте пространство имен в начале:

use DB; 

Теперь, пользователь A, принадлежащий компании A, добавит клиентов в таблицу daclients. Пользователь B от компании B добавит клиентов в таблицу dbclients.

Особая благодарность @amir bar, которая помогла мне с журналами запросов. И для этого вопроса: model - Update the table name at runtime not working - laravel Eloquent ORM

Смежные вопросы