2016-09-19 65 views
0

我有一個架構,稱爲public。在這個模式中,我有一個名爲currencies的表。Laravel 5.1 Eloquent - 引用來自驗證的不同架構說架構不存在

<?php 
declare(strict_types=1); 

namespace Lapis\Domain\Currency; 

use Lapis\Domain\Core\Database\Eloquent\Model; 

/** 
* Class EloquentCurrency 
* 
* @package Lapis\Domain\Currency 
*/ 
class EloquentCurrency extends Model implements CurrencyInterface 
{ 
    /** 
    * Indicates if the IDs are auto-incrementing. 
    * 
    * @var bool 
    */ 
    public $incrementing = false; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'public.currencies'; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 
     'symbol', 
     'code', 
     'decimal_places', 
    ]; 
} 

一切完美,由於設置$tablepublic.currencies。我可以通過存儲庫或直接在我的控制器中執行所有CRUD操作。

什麼似乎被打破是試圖使用exists規則。

在我的驗證,我有:

'name' => [ 
    'required', 
    'exists:public.currencies', 
], 

這僅僅是一個節選。最終的驗證將會更加複雜,但問題在於,當我稱之爲public.currencies時,Laravel無法看到表格。

顯然語法

schema.table

不起作用。任何想法爲什麼?我可以解決這個我使用自定義驗證和使用自定義存儲庫方法來檢查是否存在,但我想使用本地方法。

enter image description here

回答

0

的錯誤表明您的數據庫配置有一個公共連接沒有定義鍵值。檢查config/databases.php文件&指定與公共作爲連接名稱(例如使用MySQL作爲驅動程序)連接:

'connections' => [ 

    ... 

    'public' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 
], 

另外,您還可以ommit從您的驗證規則的連接,如果連接你打算與驗證是在Laraval文檔提到你的默認連接:

自定義數據庫連接

有時候,您可能需要爲Validator所做的數據庫查詢設置自定義連接。如上所示,將unique:users設置爲驗證規則將使用默認數據庫連接來查詢數據庫。若要覆蓋此設置,請使用「點」語法指定表格名稱後面的連接: