Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 15.06.2015 01:04:20

Проверьте Модель

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Region extends Model {

    public function setSlugAttribute($value)
    {
        $this->attributes['slug'] = \Slug::make($value);
    }

\App\Models\Region::create([
                'name' => 'Автономная Республика Крым', 'slug' => 'Автономная Республика Крым',
                'name' => 'Винницкая область', 'slug' => 'Винницкая область',                       
                'name' => 'Волынская область', 'slug' => 'Волынская область',
                'name' => 'Днепропетровская область', 'slug' => 'Днепропетровская область',
                'name' => 'Донецкая область', 'slug' => 'Донецкая область',
                'name' => 'Житомирская область', 'slug' => 'Житомирская область',
                'name' => 'Закарпатская область', 'slug' => 'Закарпатская область',
                'name' => 'Запорожская область', 'slug' => 'Запорожская область',
                'name' => 'Ивано-Франковская область', 'slug' => 'Ивано-Франковская область',
                'name' => 'Киев', 'slug' => 'Киев',
                'name' => 'Киевская область', 'slug' => 'Киевская область',
                'name' => 'Кировоградская область', 'slug' => 'Кировоградская область',
                'name' => 'Луганская область', 'slug' => 'Луганская область',
                'name' => 'Львовская область', 'slug' => 'Львовская область',
                'name' => 'Николаевская область', 'slug' => 'Николаевская область',
                'name' => 'Одесская область', 'slug' => 'Одесская область',
                'name' => 'Полтавская область', 'slug' => 'Полтавская область',
                'name' => 'Ровненская область', 'slug' => 'Ровненская область',
                'name' => 'Севастополь', 'slug' => 'Севастополь',
                'name' => 'Сумская область', 'slug' => 'Сумская область',
                'name' => 'Тернопольская область', 'slug' => 'Тернопольская область',
                'name' => 'Харьковская область', 'slug' => 'Харьковская область',
                'name' => 'Херсонская область', 'slug' => 'Херсонская область',
                'name' => 'Хмельницкая область', 'slug' => 'Хмельницкая область',
                'name' => 'Черкасская область', 'slug' => 'Черкасская область',
                'name' => 'Черниговская область', 'slug' => 'Черниговская область',
                'name' => 'Черновицкая область', 'slug' => 'Черновицкая область'
              ]);

}

Не в сети

#2 17.06.2015 08:54:26

Re: Проверьте Модель

Я бы так попробовал:
вместо \Slug - в начале: use App\Models\Slug, потом обращаемся: = Slug::make

\App\Models\Region::create - заменить на self::create

По остальному не понятна структура БД.

Не в сети

#3 28.06.2015 16:03:05

Re: Проверьте Модель

Gaint пишет:

Я бы так попробовал:
вместо \Slug - в начале: use App\Models\Slug, потом обращаемся: = Slug::make

\App\Models\Region::create - заменить на self::create

По остальному не понятна структура БД.

Мне города в базу добавлять через сидер или через модель?

Не в сети

#4 29.06.2015 11:11:54

Re: Проверьте Модель

koshak пишет:

Мне города в базу добавлять через сидер или через модель?

теперь представь, что по каким-то нуждам ты запускаешь сидер 100500 раз на дню.
что произойдёт?

Не в сети

#5 29.06.2015 11:48:19

Re: Проверьте Модель

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

Не в сети

#6 01.07.2015 14:49:38

Re: Проверьте Модель

Ага, спасибо большое!

Не в сети

#7 01.07.2015 15:04:22

Re: Проверьте Модель

А еще такой вопросик, я хочу реализовать ЧПУ, но в базе все будет в кирилице, мне нужно к Laravel подключать какое-то дополнение или можно обойтись стандартными средствами?

Не в сети

#8 01.07.2015 15:24:28

Re: Проверьте Модель

формируй url с помощью cocur/slugify и храни его в базе. сразу и проверишь на уникальность, сразу и по полю будешь находить запись, соответствующую маршруту. не забудь добавить индекс на поле.

Не в сети

#9 01.07.2015 15:42:50

Re: Проверьте Модель

А я хотел через Laravel 5 Cyrillic Slug

Не в сети

#10 01.07.2015 16:06:29

Re: Проверьте Модель

или так

Не в сети

#11 03.07.2015 22:05:05

Re: Проверьте Модель

А slug лучше сразу в сидере прописывать или через модель генерировать?

Не в сети

#12 06.07.2015 07:40:19

Re: Проверьте Модель

лучше — генерировать при сохранении, проверять на дубликаты, хранить в базе. поле проиндексировать. выбирать простым PHPwhere('slug''='$slug). использовать route bindings.

PHP
Route::get('blog/{post}', [ 'uses' => 'BlogController@show''as' => 'blog.show' ]);
Route::bind('post', function ($slug)
{
    if (
$post App\Post::whereSlug($slug)->first()) {
        return 
$post;
    }

    throw new 
Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
});

в контролере

PHP
/**
 * @param Post $post
 * @return Response
 */
public function show($post)
{
    
/* ... */
}

Изменено constb (06.07.2015 07:41:52)

Не в сети

#13 06.07.2015 19:43:50

Re: Проверьте Модель

А если в разных областях страны есть одинаковые села? Может ли в базе быть два одинаковых населенных пункта?

Не в сети

#14 07.07.2015 14:26:53

Re: Проверьте Модель

"одинаковость" в базе ограничивают только две вещи - primary key, который скорее всего и так автоинкрементальный айдишник, и unique index - всё остальное может дублироваться как хочешь. это уже твои проблемы как различать эти записи. если у населённого пункта есть идентификатор области то пара область-нас.пункт уже будет уникальна. если много выборок по области и по область+пункт, можно добавить unique index на два поля область+пункт - тогда на уникальность будут проверяться пары полей.

Не в сети

#15 12.11.2015 15:33:47

Re: Проверьте Модель

constb пишет:

}%формируй url с помощью cocur/slugify и храни его в базе. сразу и проверишь на уникальность, сразу и по полю будешь находить запись, соответствующую маршруту. не забудь добавить индекс на поле.

А как добавить индекс на поле? Через миграцию $table->string('name')->unique(); или как-то по-другому?

Не в сети

Подвал раздела