如何从另一个表中获取数据?这样我就可以提出条件并建立关系(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_raise、date_end_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(cycle) 传递给 cycle_id(mortalities)。
在此之前,我需要创建一个条件,以便 mortalities 的内容将按 cycle_id 相应排列,并与周期表建立关系
将使用的数据是 date_input(死亡率)、date_start_raise 和 date_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。
【讨论】:
为什么])->get()->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 )->date_start_raise()
我首先需要日期。有可能吗?
不,那是不可能的。您正在对空对象调用 ->date_start_raise() 。你必须找到一个对象然后调用它的东西。以上是关于如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)的主要内容,如果未能解决你的问题,请参考以下文章
sql中的条件总和,根据字段中的条件从另一个表中获取正确的总和
如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回