gpt4 book ai didi

laravel - 如何在 Laravel5 View 中为具有枢轴的 hasManyThrough 关系创建表单

转载 作者:行者123 更新时间:2023-12-03 21:43:50 24 4
gpt4 key购买 nike

我来自 Rails 背景,我们可以使用正确的引用轻松创建 has_many_through。

我在这个项目中的模型: Deal <=> DealsFaqs <=> Faqs

在交易模型中,我有:

    public function faqs(){
return $this->hasManyThrough('App\Faq', 'App\DealsFaqs');
}

DealsFaqs 有:
    public function deals()
{
return $this->belongsTo('App\Deal');
}

public function faqs()
{
return $this->belongsTo('App\Faq');
}

我的常见问题模型有:
    public function deals(){
return $this->hasManyThrough('App\Deal', 'App\DealsFaqs');
}

交易需要能够与 N 个常见问题相关联。

所以我为 DealsFaqs 创建了一个表,它有一个 deal_id 和一个 faq_id 字段。

我可以轻松地在 Deal 表单页面上列出常见问题解答,但这与 DealsFaqs 无关。

如何输出常见问题解答但通过表单提交它们,然后我可以在提交时检查 Controller 中的关系?

--- 根据对更多代码和详细信息的要求进行编辑:

最终会有大约 20-30 个常见问题解答。以及越来越多的交易。当管理员创建每个交易时,他们需要选择与交易相关的常见问题解答。有些将是相关的,而另一些则不会。然后这些常见问题将输出到页面。

我假设我需要一个 hasManyThrough ,因为我不能只在 Deal 上放置一个 faq_id 字段,因为它需要许多相同的 FAQ。常见问题属于许多交易。

我在 Controller 中的 DealCreate 方法:
    ///////////////////
// ASSOCIATE FAQ's TO DEALS
///////////////////
if($request->faqs){
foreach($request->faqs as $key => $faq){

// Create new DealsFaqs
$entry = new \App\DealsFaqs;

// Populate it
$entry->faq_id = $faq['id'];
$entry->deal_id = $deal->id;

$entry->save(); // Save the DealsFaqs
}
}

然后我当前的表单部分将常见问题解答与交易相关联:
       <?php $a=0; foreach($faqs as $faq): ?>
<div class="col-sm-12">
<label>
<input type="radio" name="faqs[{{ $a }}][id]" value="{{ $faq->id }}">
{{ $faq->name }}
</label>
</div>
<?php $a++; endforeach; ?>

当我选择 1 个或所有这些时,会在我创建的 Deals_faqs 表上创建一个新关系。但是由于显而易见的原因(我不知道如何解决)但是 radio 不知道要保持检查,而且我不知道如何在 Controller 中访问/更新。也是这样做的正确方法还是我的关系错了?

最佳答案

你说你正在处理一个 有很多通过关系,据我所知,它需要 3 个独立的模型才能工作。我觉得你在使用 多对多关系,因为看起来您正在使用两个模型。

正如您所说,您来自 Rails 背景,我觉得我要么犯了一个巨大的错误,要么不了解您的数据库关系,要么您有很多对很多,并且有很多混淆。

仅供引用:有很多通过,来自 laravel 文档:

The "has-many-through" relationship provides a convenient short-cut for accessing distant relations via an intermediate relation. For example, a Country model might have many Post models through an intermediate User model.



在此处进一步阅读: https://laravel.com/docs/5.2/eloquent-relationships#has-many-through

以及多对多: https://laravel.com/docs/5.2/eloquent-relationships#many-to-many

如果您使用多对多,我觉得您的数据库架构应该由三个表组成:
deals , faqs和中间表 deal_faq ,第三个表名遵循 Laravel 中间表的约定,其中连接表的单数名称按字母顺序使用,中间有下划线。表 deal_faq需要一个 deal_idfaq_id .

然后您将需要两个模型(只有两个,而不是三个)
DealFaq ,具有以下关系方法:
Deal模型:
public function faqs(){
return $this->belongsToMany('App\Deal');
}
Faq模型:
public function deals(){
return $this->belongsToMany('App\Faq');
}

现在,要利用这些,您可以执行以下操作,例如:
// get a deal
$deal = App\Deal::first(); // grab the first one in the db

// get faqs linked to deal
$deal->faqs;

// connect an faq and deal together
$faq = App\Faq::first();
$deal->attach($faq->id); // where id is the primary key attribute

请注意,此答案假定您在定义关系时遵循 laravel 设置的约定。

很抱歉,我不太完全理解您问题的这一部分:“我如何输出常见问题解答但通过表单提交它们,然后我可以在提交时检查 Controller 中的关系? ”

我假设你在问,如果我提交 Faq在一个表单中,我如何获取 Faq的关系。在这种情况下,如果您使用的是 Faq,您可以执行类似的操作。的 id在您的表单请求中。
$faqId = $request->faq_id;

$faq = App\Faq::find($faqId);

$deals = $faq->deals;

由于您没有展示太多代码,因此很难说,我做了很多假设。无论如何,希望这会有所帮助,如果您需要进一步说明,请询问并提供有关代码的更多详细信息(如果可以)。

关于laravel - 如何在 Laravel5 View 中为具有枢轴的 hasManyThrough 关系创建表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com