$clinic->doctors()->each(function ($doctor) {
$doctor->append('custom_atr');
})
$clinic = Clinic::with('doctors')->find(1);
$clinic->doctors->each(function ($doctor) {
$doctor->append('custom_atr');
});
matchMany($models, $queryResults, $relation, $related, $foreignKey, $primaryKey)
public function relatedOrders()
{
return $this->hasMany(self::class, "parent_id", "id")->fromHighPriceOrders();
}
$news = News::withCount(['comments as comments_positive' => function ($query) {
$query->where('status', 1);
},'comments as comments_neutral' => function ($query) {
$query->where('status', 0);
},])->get();
// счетчики для первой новости из выборки
$news[0]->comments_positive_count;
$news[0]->comments_neutral_count;
$follower->follower->username_slug
optional($follower->follower)->username_slug
$follower->follower->username_slug ?? 'undefined';
QUEUE_DRIVER=sync
, что по сути значит "никаких очередей, выполняй всё сразу". Если вы хотите, чтобы очереди выполнялись в фоне, вам нужно изменить драйвер на один из подходящих вариантов. К примеру, если изменить на database
и создать в БД нужные таблицы, то все задания будут помещаться в эти таблицы. Для их выполнения нужно либо запускать php artisan queue:work
(одноразовое выполнение всех заданий), либо php artisan queue:work --daemon
(демон, который будет висеть и мониторить добавление заданий в очередь), либо, лучше всего, использовать supervisor, который будет сам следить за тем, чтобы демон висел в памяти.passes($attribute, $value, $parameters, $validator)
->orderBy('image_region.id', 'asc')
select `images`.*, `image_region`.`region_id` as `pivot_region_id`, `image_region`.`image_id` as `pivot_image_id` from `images` inner join `image_region` on `images`.`id` = `image_region`.`image_id` where `image_region`.`region_id` = 1 order by `image_region`.`id` ASC
/**
* Convert an IP address from presentation to decimal(39,0) format suitable for storage in MySQL
*
* @param string $ip_address An IP address in IPv4, IPv6 or decimal notation
* @return string The IP address in decimal notation
*/
function inet_ptod($ip_address)
{
// IPv4 address
if (strpos($ip_address, ':') === false && strpos($ip_address, '.') !== false) {
$ip_address = '::' . $ip_address;
}
// IPv6 address
if (strpos($ip_address, ':') !== false) {
$network = inet_pton($ip_address);
$parts = unpack('N*', $network);
foreach ($parts as &$part) {
if ($part < 0) {
$part = bcadd((string) $part, '4294967296');
}
if (!is_string($part)) {
$part = (string) $part;
}
}
$decimal = $parts[4];
$decimal = bcadd($decimal, bcmul($parts[3], '4294967296'));
$decimal = bcadd($decimal, bcmul($parts[2], '18446744073709551616'));
$decimal = bcadd($decimal, bcmul($parts[1], '79228162514264337593543950336'));
return $decimal;
}
// Decimal address
return $ip_address;
}
/**
* Convert an IP address from decimal format to presentation format
*
* @param string $decimal An IP address in IPv4, IPv6 or decimal notation
* @return string The IP address in presentation format
*/
function inet_dtop($decimal)
{
// IPv4 or IPv6 format
if (strpos($decimal, ':') !== false || strpos($decimal, '.') !== false) {
return $decimal;
}
// Decimal format
$parts = array();
$parts[1] = bcdiv($decimal, '79228162514264337593543950336', 0);
$decimal = bcsub($decimal, bcmul($parts[1], '79228162514264337593543950336'));
$parts[2] = bcdiv($decimal, '18446744073709551616', 0);
$decimal = bcsub($decimal, bcmul($parts[2], '18446744073709551616'));
$parts[3] = bcdiv($decimal, '4294967296', 0);
$decimal = bcsub($decimal, bcmul($parts[3], '4294967296'));
$parts[4] = $decimal;
foreach ($parts as &$part) {
if (bccomp($part, '2147483647') == 1) {
$part = bcsub($part, '4294967296');
}
$part = (int) $part;
}
$network = pack('N4', $parts[1], $parts[2], $parts[3], $parts[4]);
$ip_address = inet_ntop($network);
// Turn IPv6 to IPv4 if it's IPv4
if (preg_match('/^::\d+.\d+.\d+.\d+$/', $ip_address)) {
return substr($ip_address, 2);
}
return $ip_address;
}
DB::update('update users set votes = 100 where name = ?', ['John']);
UPDATE tbl, (select @cnt:=0) as cnt SET rank=(@cnt:=@cnt+1)