laravel如何查特定中间表数据的关联数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel如何查特定中间表数据的关联数据相关的知识,希望对你有一定的参考价值。
新手求教 有一个班级课程中间表course_class 三个字段 id course_id class_id 我想通过id 查到对应的班级和课程 应该怎么查
简单关联即可啊,首先你得知道课程表和班级表是哪个表,结构如何。比如,课程表是course,班级表是class,主键都是id
查某一course_id的课程信息
select a.* from course a,course_class b
where a.id=b.course_id
and b.course_id='xxx'
查是哪些班级选择了某一课程
select a.* from class a,course_class b
where a.id=b.class_id
and b.course_id='xxx' 参考技术A laravel如何查特定中间表数据的关联数据
它是如何工作的 ?使用 Spatie/laravel-cronless-schedule 自定义的 Laravel 时间表
【中文标题】它是如何工作的 ?使用 Spatie/laravel-cronless-schedule 自定义的 Laravel 时间表【英文标题】:How does it work ? Laravel Schedule Customized with Spatie/laravel-cronless-schedule 【发布时间】:2021-05-17 10:28:30 【问题描述】:我正在使用带有 Spatie/laravel-cronless-schedule 包的 laravel 时间表。 PHP 7.4 和 Laravel 5.6。
我对它如何处理时间和重叠感到困惑。
到目前为止我已经完成了。
// Noman Command for Send SMS
$schedule->command('api:elite-send-sms')->everyMinute()->withoutOverlapping();
$schedule->command('api:metro-send-sms')->everyMinute()->withoutOverlapping();
// Noman Command for Update Delivery Report
$schedule->command('EliteUpdateDeliveryStatus:updateStatus')->everyMinute()->withoutOverlapping();
$schedule->command('MetroUpdateDeliveryStatus:updateStatus')->everyMinute()->withoutOverlapping();
我已经通过 spatie/laravel-cronless-schedule 运行了这个命令
php artisan schedule:run-cronless --frequency=5
它帮助我以 5 秒的频率连续点击 schedule:run 命令。
现在我想知道,当我运行 schedule:run-cronless 命令时,我的 schedule 命令中会发生什么
$schedule->command('api:metro-send-sms')->everyMinute()->withoutOverlapping();
我以 5 秒的间隔运行了 schedule:run-cronless,但这里是 everyMinute() 和 withoutOverlapping() p>
现在我的问题是,可以吗?还是我错了?还是我做了一些不合逻辑的事情?
任何解释都将受到高度赞赏。
【问题讨论】:
【参考方案1】:TL;DR:它可能会按照您期望的方式工作。但根据你的描述,我想说你应该使用 Laravel Queues。
如果你声明一个everyMinute()
,实际上这将使laravel 在每次调用php artisan schedule:run
时运行这个事件。如果您将其声明为everyFiveMinutes()
,它将在每次调用schedule:run
时每分钟执行一次可被5 整除的命令。 Laravel 调度程序被构建为每分钟运行一次。
spatie-package,正如它明确指出的那样,是为测试环境而设计的。
Laravel 的原生调度程序依赖于每分钟执行一次的 cron。它坚如磐石,在大多数情况下你应该坚持使用它。 我建议您不要将其用于生产。此外,如果您进行一些测试,频率参数显然是 ment,以减少您必须等待操作的时间。同样,您不应该依赖它来构建生产环境。
通过使用withoutOverlapping()
,您将消除更频繁运行它的一些副作用。它将完成工作,如果前一个仍在处理中,则不会启动新的。
但是,我认为很明显你在 Laravel 中使用了错误的工具来处理可能很慢的任务。让我们以您的第一个命令api:elite-send-sms
为例。我很确定您不想每 5 秒发送一次短信。你想在一个事件中发送它,这就是 Laravel 队列的用途。在事件中,您将dispatch 一个作业加入队列,并立即完成请求,而无需等待作业执行完毕。
你仍然可以使用队列,即使你的环境不能使用redis和Laravel Horizon。但是,如果您可以使用 Horizon,它会让您更轻松(在花了一天时间了解它之后)。
【讨论】:
以上是关于laravel如何查特定中间表数据的关联数据的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?
它是如何工作的 ?使用 Spatie/laravel-cronless-schedule 自定义的 Laravel 时间表