如何从另一个表中获取数据?这样我就可以创造一个条件和建立一段关系(拉威尔+维)

snz8szmq  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(307)

请帮我开发一个网站?
我想从cycles表中获取数据,这样我就可以创建if条件并与moralities表建立关系。
周期表包含以下数据:

$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\u start\u raise、date\u end\u raise和id
死亡率表包含以下数据:

$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(循环)到循环id(死亡)。
在这之前,我需要建立一个条件,这样死亡的内容将按循环id进行相应的排列,并与循环表建立关系
将使用的数据是日期\u输入(致命)、日期\u开始\u上升和日期\u结束\u上升(循环)。如果数据\u输入属于从日期\u开始\u上升到日期\u结束\u上升的日期范围,则id将传递到循环\u id。

例如

周期表中有两个数据

(9月3日至28日):id=1
(10月1日至11月5日):id=2
用户打开死亡率模式以输入数据并将数据发送到死亡率表。

根据死亡率模型,日期(dateœinput)为9月6日。由于输入的日期属于日期范围(从开始日期到结束日期)9月3日到9月28日,周期数据的id为1,因此id将为1。在获取之后,id的值将传递给cycle\ id(死亡率),这样两个表就有了关系。
我尝试了这个代码,但它是一个错误
“message”:“调用未定义的方法app\cycle::date\u start\u raise()”,
VermanityController.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()
  ]);
}

请帮帮我。提前感谢:)

bpsygsoo

bpsygsoo1#

您正在调用data\u start\u 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

x4shl7ld

x4shl7ld2#

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。

相关问题