Loveorigami писал(а):
спасибо. посмотрел код, настройки, но так и не понял каким образом могу получить, скажем, для 30250 записи slug
30250-origami-heart.
Slug may be generated from multiple and related attributes:
public function behaviors()
{
return [
'slug' => [
...
'attribute' => ['name', 'language.username'],
...
]
];
}
Loveorigami писал(а):Спасибо. Теперь все работает, как надо!
У меня есть еще один интересный момент. В codeIgniter я реализовывал через составной alias. А именно:
- Имеется база с более 40 000 записей (rss новости с фликра по оригами).
- При добавлении новой очень большая вероятность, что похожая уже есть, причем не одна. (например "origami heart" встречается более 50 раз)
- Это означает, что при добавлении следующей записи "origami heart", поведение, как я понял, будет генерировать уникальный slug, поочередно перебирая свободные от origami-heart1 до origami-heart50, т.е. делать 50 запросов в базу...
- есть идея, для такого случая генерировать slug вида id-записи + slug.
- т.е. в данное поведение добавить следующий функционал (suffix и prefix)...
Словом, хранение aliasa в виде id+slug в одном поле намного облегчит работу с таблицей, где title может встречаться многократно.
Loveorigami писал(а):Спасибо. Теперь все работает, как надо!
У меня есть еще один интересный момент. В codeIgniter я реализовывал через составной alias. А именно:
- Имеется база с более 40 000 записей (rss новости с фликра по оригами).
- При добавлении новой очень большая вероятность, что похожая уже есть, причем не одна. (например "origami heart" встречается более 50 раз)
- Это означает, что при добавлении следующей записи "origami heart", поведение, как я понял, будет генерировать уникальный slug, поочередно перебирая свободные от origami-heart1 до origami-heart50, т.е. делать 50 запросов в базу...
- есть идея, для такого случая генерировать slug вида id-записи + slug.
- т.е. в данное поведение добавить следующий функционал (suffix и prefix)...
Словом, хранение aliasa в виде id+slug в одном поле намного облегчит работу с таблицей, где title может встречаться многократно.
нужный alias (30250-origami-heart) получается только при обновлении. При добавлении - получаю просто - 'origami-heart'.
@r3verser
чтоб получить действительно уникальный - нужно slug обновлять после создания записи (об этом писал выше).
В общем - задать логику для id, который еще не существует - через uniqueSlugGenerator проблематично
поведение правильное. результат, который нужен - "неправильный"...
- Я получаю новости через rss и соответственно, в цикле их добавляю. значит, тот вариант генерации уникального slug, который я определил в настройках, должен работать, как при создании, так и при обновлении. Иначе, когда пойдет поток rss с 50 одинаковыми титлами - при добавлении получу 50+ запросов в базу на генерацию последнего уникального.
- как я думаю
-- добавляем функционал "prefix"
-- получаем slug, проходим валидацию, записываем в базу
-- если определен prefix, используем метод afterSave
-- получаем последний id. генерируем уникальный alias (id+slug) и обновляем.
вот тогда, мне кажется, логика работы поведения будет полной
Loveorigami писал(а):поведение правильное. результат, который нужен - "неправильный"...
- Я получаю новости через rss и соответственно, в цикле их добавляю. значит, тот вариант генерации уникального slug, который я определил в настройках, должен работать, как при создании, так и при обновлении. Иначе, когда пойдет поток rss с 50 одинаковыми титлами - при добавлении получу 50+ запросов в базу на генерацию последнего уникального.
- как я думаю
-- добавляем функционал "prefix"
-- получаем slug, проходим валидацию, записываем в базу
-- если определен prefix, используем метод afterSave
-- получаем последний id. генерируем уникальный alias (id+slug) и обновляем.
вот тогда, мне кажется, логика работы поведения будет полной
prefix излишен. я уже реализовываю необходимый функционал.
public function attach($owner)
{
print_r($owner->primaryKey());
}
в гриде мне выдало массив из 12 значений (для 3 записей). В форме - всего одно. Как и должно быть.
2014-11-04_19-02-01.jpg
Разве поведение не должно срабатывать при вставке-редактировании записи?
оно должно срабатывать на тех событиях, на которые мы его вешаем. А на какое событие вешаем, поведение решает именно в attach(). Так что оно не срабатывает там, а только аттачится к модели.
12 раз потому, что у вас 3 модели вызываются видимо 12 раз где-то.
у меня на гриде ничего не выводится.