2013-09-09 6 views
3

Я использую Laravel для создания нового веб-проекта. Я использую Eloquent (его ORM), чтобы делать все связанные с базой данных. У меня есть база данных SQLite с двумя таблицами: «изображения» и «файлы». Поэтому у меня есть две модели: «Image.php» (класс Image extends Eloquent) и «File.php» (класс File extends Eloquent).Неопределенный метод Файл :: save() (модель Laravel)

Согласно документации, я делаю это правильно. Я попытался использовать модель изображения и отлично работает. Пример типичного использования модели:

$image = new Image; 
$image->val1 = $val1; 
$image->val2 = $val2; 
$image->save(); 

Однако, по какой-то причине я не знаю, модель файла работает не так, как ожидалось. Я проверил все: имя таблицы, имя класса, имя файла, таблицы ... и кажется мне хорошо. Я пытался сделать в принципе то же самое:

$file = new File; 
$file->val1 = $val1; 
$file->val2 = $val2; 
$file->save(); 

При попытке запуска этого я получаю:

Призыв к неопределенным метод Осветите \ Support \ \ Фасады File :: Save()

Если я делаю var_dump() как раз перед тем исключением, кажется, что модель загружается:

object(Illuminate\Support\Facades\File)#133 (4) { 
    ["val1"]=> string(8) "abcdef" 
    ["val2"]=> string(10) "ghijkl" 
} 

Что мне здесь не хватает?

+0

Убедитесь, что класс файл не существует где-то в другом месте. – Virus721

+0

Вы добавили определение extends для 'File'? – Halcyon

+0

Я видел это, когда класс файла миграции был назван так же, как класс модели. – Corgalore

ответ

10

Файл является зарезервированным словом в этом случае, потому что это псевдоним ниже фасада (определено в /app/config/app.php)

'File' => 'Illuminate\Support\Facades\File', 

изменить название модели к чему-то еще, и все вашего кода должны работать нормально.

+1

Как я мог пропустить это ... большое вам спасибо (приму этот ответ). –

+2

То же самое касается Event, где у меня была проблема: Звонок на неопределенный метод Illuminate \ Support \ Facades \ Event :: save() –

0

Эта проблема возникает, если вы используете зарезервированные ключевые слова в качестве имени модели. Для например:

Запрос

Файл ..etc

-2

Для парней, которые ищут подобную проблему, помните имени Вашей модели класса должен быть особым.

class Client extends Eloquent { 

protected $table = 'promociones';   

} 

затем, в контроллере:

client = new Client;