我正在嘗試播種我的資料庫,但是當我使用modelName :: create()或$ modelName-> save()時遇到問題。
我有這種錯誤
{"error":{"type":"Symfony\Component\Debug\Exception\FatalErrorException","message":"Call to undefined method Doc::save()","file":"/Applications/MAMP/htdocs/Doc_project/app/database/seeds/DatabaseSeeder.php","line":45}
要麼
Call to undefined method Doc::create()
但我不知道為什麼。
我的模特:
class Doc extends Eloquent {
protected $table = 'doc';
protected $fillable = array('creators_name', 'type_document', 'title', 'description');
public function steps(){
return this->hasMany('Step')
}
public function tags(){
return this->belongsToMany('Tag', 'doc_tag', 'id_doc', 'id_tag')
}
}
我的播種者:
class DatabaseSeeder extends Seeder {
public function run()
{
Eloquent::unguard();
$this->call('DocAppSeeder');
$this->command->info('Doc app seeds finished.'); // show information in the command lin }
}
}
class DocAppSeeder extends Seeder {
public function run(){
DB::table('doc')->delete();
DB::table('step')->delete();
DB::table('tag')->delete();
DB::table('doc_tag')->delete();
$doc = new Doc;
$doc->creators_name = 'Alexis';
$doc->type_document = 'Solution';
$doc->title = 'NoAD Printer';
$doc->description = 'Installation imprimante en NoAd';
$doc->save();
/*$docTest = Doc::create(array(
'creators_name' => 'Alexis',
'type_document' => 'Solution',
'title' => 'NoAD Printer',
'description' => 'Installation imprimante en NoAd'
));
}
}
我嘗試使用DB::Table(...)->insert(...)起作用,但是我不能使用它,因為我需要擷取每個對象的一些資訊
有人有主意嗎?
謝謝
$doc = new Doc();
@Cheery您是說由于缺少()而無法執行個體化他的Doc模型嗎? 因為它們是可選的,除非您将參數傳遞給要執行個體化的類的構造函數。
沒有改變
另外,您是否完成了composer dump-autoload
@Ohgodwh,我已經做完了
看起來PHP正在使用與您認為的類不同的全局級别Doc類。也許是外觀或别名(自我連結,包含有關如何調試外觀問題的詳細說明)?
無論如何,最好的做法是檢視PHP認為此類的位置。在您的播種器中,在save之前,包括以下調試代碼
$r = new ReflectionClass('Doc');
var_dump(
$r->getFilename()
);
var_dump(
$r->getName()
);
這将告訴您類的全名(如果是别名)以及類的定義位置。我的猜測是您認為Doc的類不是您的Eloquent模型,實際上是一個不同的類。
根據下面的評論,聽起來好像有人在其中定義了一個名為Doc的類。
/Applications/MAMP/htdocs/Doc_project/app/database/migrations/2014_10_12_201016??_doc.php
這很不正常-盡管很容易看到它是如何發生的。您可能使用了artisan指令來建立這樣的遷移
php artisan migrate:make doc
通過不使用更簡單的形式
php artisan migrate:make create_doc_table
您無意中建立了一個與模型同名的遷移類。嘗試使用一個不太具體的名稱重新建立此遷移,您應該已經準備就緒。
當我寫您提供給我的時,我有以下文本:string(87)" /Applications/MAMP/htdocs/Doc_project/app/database/migrations/2014_10_12_201016_doc.php" string(3)" Doc"是否正常?
@Alexis答案已更新以反映此新資訊。 不,雖然很容易,但這是不正常的。 Laravel使用該檔案中定義的Doc類代替了app / models中的那個。 這就是為什麼您看到錯誤。
我認為您發現了我的問題,我嘗試!
我确認,現在效果更好! 謝謝!
檢查您的遷移檔案-
復原遷移,建立遷移檔案的新版本并繼續。
當用于建立遷移時,工藝師通常會發生這種情況。
對我而言,我復原了遷移,并使用另一個名稱撤消了遷移,并且它可以正常工作。