如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)

Posted

技术标签:

【中文标题】如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)【英文标题】:How to fetch data from another table? so that I can make a condition and make a relationship (Laravel + Vue) 【发布时间】:2019-04-28 17:58:52 【问题描述】:

请帮我开发一个网站?我想从周期表中获取数据,以便我可以创建一个 if 条件并与道德表建立关系。

周期表包含以下数据:

$table->increments('id');
$table->date('date_start_raise');
$table->integer('population');
$table->integer('raising_days');
$table->date('date_end_raise');
$table->date('date_manure_collection');
$table->date('date_cleaning');
$table->date('date_disinfection');
$table->date('date_rest_day');
$table->date('date_preparation');
$table->unsignedInteger('user_id');
$table->timestamps();

我需要的数据是 date_start_raisedate_end_raiseid

死亡率表有以下数据:

$table->increments('id');
$table->date('date_input');
$table->integer('number_of_mortality');
$table->integer('chicken_age');
$table->mediumText('cause_of_death')->nullable();
$table->unsignedInteger('cycle_id');
$table->unsignedInteger('user_id'); 
$table->timestamps();

我需要将 id(cycle) 传递给 cycle_id(mortalities)。

在此之前,我需要创建一个条件,以便 mortalities 的内容将按 cycle_id 相应排列,并与周期表建立关系

将使用的数据是 date_input(死亡率)、date_start_raisedate_end_raise(周期)。如果 data_input 属于 date_start_raise 到 date_end_raise 的日期范围,id 将传递给 cycle_id


举例

循环表中有两个数据

(9 月 3 日 - 28 日):id = 1(10 月 1 日 - 11 月 5 日):id= 2

用户打开死亡率模式输入数据并将数据发送到死亡率表。

根据死亡模式,日期(date_input)是 9 月 6 日。id 将被 fetch 为 1,因为 date_input 属于日期范围(from date_start_raise to date_end_raise)9月3日-9月28日,周期数据id为1。获取后id的值将传递给 cycle_id(mortality) 以便两个表有关系。


我尝试了这段代码,但它是一个错误

"message": "调用未定义方法 App\Cycle::date_start_raise()",

MortalityController.php(存储)

public function store(Request $request)

   $cycle_id = Mortality::whereDate([
     ['date_input','>=', Cycle::date_start_raise()],
     ['date_input','<=', Cycle::date_end_raise()],
   ])->get(Cycle::id());

   $this->validate($request, array(
     'date_input' => 'required|date',
     'number_of_mortality' => 'required|numeric',
     'chicken_age' => 'required|numeric'
   ));

   return Mortality::create([
    'date_input' => request('date_input'),
    'number_of_mortality' => request('number_of_mortality'),
    'chicken_age' => request('chicken_age'),
    'cause_of_death' => request('cause_of_death'),
    'cycle_id' => $cycle_id,
    'user_id' => Auth::id()
  ]);

请帮助我。在此先感谢:)

【问题讨论】:

【参考方案1】:
  public function store(Request $request)
        
         $cycle = Mortality::whereDate([
         [request('date_input'),'>=', Cycle::date_start_raise()],
         [request('date_input'),'<=', Cycle::date_end_raise()],
         ])->get()->first();

         if ($cycle!==NULL)
            $cycle_id = $cycle->id;
         else return;//you may send with an error message like invalid date
         //above lines are a little bit changed.

         $this->validate($request, array(
           'date_input' => 'required|date',
           'number_of_mortality' => 'required|numeric',
           'chicken_age' => 'required|numeric'
           ));

         return Mortality::create([
           'date_input' => request('date_input'),
           'number_of_mortality' => request('number_of_mortality'),
           'chicken_age' => request('chicken_age'),
           'cause_of_death' => request('cause_of_death'),
           'cycle_id' => $cycle_id,
           'user_id' => Auth::id()
           ]);
       

当您使用带有 where 子句的 get 方法时,您得到的是一个集合;不是一个实例。这就是为什么你不能分配 id。通过使用 first(),我们得到了一个 id。

【讨论】:

为什么])-&gt;get()-&gt;first(); 是重复的?【参考方案2】:

您在调用 data_start_raise() 时并没有真正告诉它要在哪个条目上执行它

['date_input','>=', Cycle::date_start_raise()],
 ['date_input','<=', Cycle::date_end_raise()

例如,您必须找到一个条目

Cycle::find( id goes here )->date_start_raise()

https://laravel.com/docs/5.7/eloquent

【讨论】:

Cycle::find( id goes here )-&gt;date_start_raise() 我首先需要日期。有可能吗? 不,那是不可能的。您正在对空对象调用 ->date_start_raise() 。你必须找到一个对象然后调用它的东西。

以上是关于如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)的主要内容,如果未能解决你的问题,请参考以下文章

sql中的条件总和,根据字段中的条件从另一个表中获取正确的总和

从另一个访问一个数据库

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回

如何从另一个表中获取每个值的计数?

如何使用 Fluent NHibernate 从另一个表中获取一列

如何从另一个表中获取数据并插入到 EF Core 中所需的表中