天天看點

php 調用未定義方法,關于php:Laravel調用未定義的方法create()和save()

我正在嘗試播種我的資料庫,但是當我使用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中的那個。 這就是為什麼您看到錯誤。

我認為您發現了我的問題,我嘗試!

我确認,現在效果更好! 謝謝!

檢查您的遷移檔案-

復原遷移,建立遷移檔案的新版本并繼續。

當用于建立遷移時,工藝師通常會發生這種情況。

對我而言,我復原了遷移,并使用另一個名稱撤消了遷移,并且它可以正常工作。