[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ActiveRecord
Страницы: 1, 2, 3, 4, 5, 6
twin
Цитата (Arh @ 14.03.2018 - 18:53)
Например в том же классе User будет метод User->get(1), а если нужно получить всех пользователей тогда User->getList(), как тут быть с буквой s?
Никак. Как раз тут не нужно множественное число. Laravel, допустим, юзает такую конструкцию:
User->all();

Множественное число нужно для назвыния таблицы. В данном случае она будет называться users. Это не режет слух.
Цитата (Arh @ 14.03.2018 - 18:53)
Есть что то вроде "select id from user where...", ИМХО это проще читается, чем дополнительно изворачивать язык произнося s
Ну ты не англичанин))) Если бы мы программировали на русском, это звучало бы так:
"выбрать идентификатор из пользователя где...". В кишки ему залезть, там выбрать? smile.gif
Цитата (Ron @ 14.03.2018 - 20:00)
twin, а ты меня с какой целью в топик приглашаешь?
Забей. Мне просто очень фраза твоя понравилась, на всегда запомнил. Жаль не могу найти. Звучала как то так: "не то что ваш унылый AR"

Цитата (chee @ 14.03.2018 - 20:25)
А чем тебе пропел не нравится, зачем обязательно свое писать?
Мне все нравится. Но это проект для души, пет. А теперь предствь себе, ты сидишь, играешь на гитаре, а к тебе подходят и говорят - нахрена? Включи магнитофон!

Мне очень нравится процесс созидания. Кроме того, всегда узнаешь что-то новое. Что нового можно узнать, юзая одни интерфейсы? sad.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
Цитата
Ну ты не англичанин))) Если бы мы программировали на русском, это звучало бы так

Ну мы же не сочинение пишем, а команды)

Поэтому английский для программирования лучше подходит, он деревянный.
С s на русском это звучало бы так "выбрать идентификатор, фамилия, дата из пользователи где...", что тоже не сильно литературно.

В общем мой посыл был в том, что не стоит приплетать сюда какие то правила письменной речи, иначе крыша поедет) Это язык программирования, это команды, имена сущностей и их значения.
[выбрать] (имя_сущности) [из] (имя_сущности) [где] (имя_сущности) = 'значение'

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Я начал делать его в виде либы (у меня как раз все остальное так и сделано). Но столкнулся с проблемой. Не получилось узнать имя класса, вызвавшего либу. Можно конечно плюнуть на идею автоматического определения имени таблицы, но уж очень это красиво))) Кроме того, так работает Laravel, а мой фреймворк заточен на похожие правила (он же учебный).

Может есть у кого идеи, как в вызванном классе узнать вызывающий? Причем он не первый. Через трассировку не вышло sad.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kaww
Цитата (twin @ 15.03.2018 - 16:01)
Может есть у кого идеи, как в вызванном классе узнать вызывающий?

Если у тебя так
Цитата (twin @ 14.03.2018 - 20:28)
пользователю достаточно отнаследоваться от сервиса

то нет ничего проще - get_class($this)
Для статичных вызовов - static::class , но это работает только с версии 5.5, вроде.
twin
Цитата (kaww @ 15.03.2018 - 09:10)
Если у тебя так
Это сейчас так. Пришлось наследоваться. А хотелось бы библиотекой, там такой фокус не канает. sad.gif


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kaww
Цитата (twin @ 15.03.2018 - 17:16)
А хотелось бы библиотекой

тогда debug_backtrace не решение, все таки не для этого он. Можно по трейтам упороться:
trait Foo {

public function test()
{
return get_class($this);
}

public static function testStatic()
{
return static::class;
}
}



class Bar {
use Foo;
}

$bar = new Bar;
var_dump($bar->test(), Bar::testStatic());

twin
Не, не годится. Да фиг с ним, сделаю как у всех. По крайней мере ни кто же не заставляет его юзать, рекорд этот.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
Цитата (chee @ 15.03.2018 - 00:25)
А чем тебе пропел не нравится, зачем обязательно свое писать?
twin
Цитата (Invis1ble @ 15.03.2018 - 10:57)
NIH же
Не, не то. Эта хрень касается коммерческих разработок. А какая нафиг коммерция с моей свистоперделки? smile.gif Вот если бы я действительно хотел бы с неё бабла рубануть, то тогда напичал бы доктринами и прочей лабудой. А так это для удовольствия. smile.gif

Здесь азарт - а смогу я так же?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Ron
Цитата (twin @ 15.03.2018 - 02:18)
Звучала как то так: "не то что ваш унылый AR"

Значит чью-то кривую реализацию паттерна обсуждали, один фиг не помню. Раз уж пришел, кину свои 3 копейки.

Паттерн AR, как и любые другие решения семейства ORM, по сути служит для перехода от объектов к не объектам. Иначе говоря, для сильного погружения в парадигму ООП (корове седло) biggrin.gif

twin
Цитата (Ron @ 15.03.2018 - 15:27)
Паттерн AR, как и любые другие решения семейства ORM, по сути служит для перехода от объектов к не объектам. Иначе говоря, для сильного погружения в парадигму ООП (корове седло)
Я прекрасно это знаю. Но фреймворк изначально планировался как объектный. Это же эксперимент был. smile.gif А потом стало жалко бросать.

Ну а раз так, пусть уж будут все признаки. smile.gif


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Вот еще вопрос возник. Понятно, что объект модели по идее должен содержать свойства, как поля в таблице. Но если мне не нужно все, допустим там поле `text`, а в нем полкило этого текста. А мне нужно только автора.

Смотрю на различные реализации, и не нахожу ответа. Все тянут всё полностью. Кто знает, допустим в Yii или Ларе есть такая возможность? Выбрать поля заранее. Что то типа
User::find(1, ['date', 'author']);


И тут же второй вопрос. Использование алиасов сильно покоробит паттерн?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
T1grOK
Цитата (twin @ 16.03.2018 - 13:03)
Смотрю на различные реализации, и не нахожу ответа. Все тянут всё полностью. Кто знает, допустим в Yii или Ларе есть такая возможность?

Есть.
//YII2 ActiveRecord
User::find()->select(['column1', 'column2'])->where(['id' => 1])->one()
// Laravel Eloquent
User::select(['column1', 'column2'])->where('id', 1)->first();


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
twin
О! Спасибо! В доках все очень расплывчато, там про конструктор только для where(). Значит я на правильном пути)))

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

User::select(['num' => $command->expression('MAX(id)')])

А значит в модели появится поле num, которого нет в таблице. Соответственно модель получится только для чтения. Стоит с этим бороться програмно, или (как мне кажется) не стоит думать о дураках? :) Я имею ввиду защиту от дурака, уж больно громоздкой она получается. :(

Да и вообще, это полезно было бы - алиасы.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
User::find(1, ['date', 'author']);

Я работал с 3 разными AR, не в одной из них такой функционал не нужен был. Если нужны были какие-то поля у объекта, то выгружались все поля. AR это про упрощение жизни, а не оптимизацию. Ты акцентируешь внимание не на тех вещах и занимаешься каким-то микро-менеджементом. Когда у тебя в системе буду в реальном времени сотни объектов, последнее что ты захочешь это то что бы у них качество (в данном случае набор потенциально заполненных полей) различалось.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.