我是PHP的新手。使用Laravel这很简单:
@isset($tags)
@foreach($tags as $tag)
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
{{ $tag->name }}
</a>
<ul class="dropdown-menu">
@foreach($tag->categories as $category)
<li><a href="{{-- route('register') --}}" {{$category->name }}</a></li>
<li class="divider"></li>
@endforeach
</ul>
</li>
@endforeach
@endisset
我需要使用普通的PHP,因为Laravel似乎速度很慢而且我做了这个
<?php if(isset($tags)): ?>
<?php foreach($tags as $tag): ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
<?php echo $tag['name'] ?>
</a>
</li>
<?php endforeach ?>
现在我被卡住了。
$tags
显示效果不错,但我似乎没有$tag->categories
下拉列表。
我的查询如下:
SELECT t.id, t.name as tag_name, c.id, c.name as c_name from tags t INNER JOIN category_tag ct ON (t.id = ct.tag_id)'.
'INNER JOIN categories c ON (ct.category_id = c.id) ORDER BY t.id
任何帮助都会很好。
答案 0 :(得分:1)
试试这个:
<?php
if(isset($tags)){
foreach($tags as $tag){ ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
<?php echo $tag->name; ?>
</a>
<ul class="dropdown-menu">
<?php
foreach($tag->categories as $category){ ?>
<li><a href="{{route('register')}}" <?php echo $category->name; ?> </a></li>
<li class="divider"></li>
<?php } ?>
</ul>
</li>
<?php }
}
?>
虽然,我建议使用laravel语法。它不会使你的页面变慢,因为它们只是被转换为类似上面例子的帮助者。
答案 1 :(得分:0)
没有下拉似乎正常,因为您的PHP脚本中没有<ul class="dropdown-menu">
,就像您的laravel刀片中提到的那样:
<ul class="dropdown-menu">
@foreach($tag->categories as $category)
<li><a href="{{-- route('register') --}}" {{$category->name }}</a></li>
<li class="divider"></li>
@endforeach
</ul>
然而,如你所说, laravel很简单,雄辩的模型关系的原因。
当然,你可以用很多不同的方式在 vanilla php 中做到这一点。
我想到了这两种方法......
请注意,第一个使用更多php处理,而第二个使用更多负载数据库。
让我们专注于第二个,使用混合数据库处理和php ...
因此,请将您的查询修改为:
SELECT t.id, t.name as tag_name,
(SELECT group_concat(
(SELECT concat_ws(':',c.id,c.name) FROM categories c WHERE ct.category_id = c.id)
) FROM category_tag ct WHERE ct.tag_id = t.id) as categories_ctn
from tags t ORDER BY t.id
现在,您将有一个categories_ctn
列,其中,
与category_id:category_name
所以最后要做的是将数据分解为数组并修改视图脚本。请注意这个php脚本中的评论...
<?php if(isset($tags)): ?>
<?php foreach($tags as $tag) { ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
<?php echo $tag['tag_name'] ?>
</a>
<ul class="dropdown-menu">
<?php
$categories = explode(',',$tag['categories_ctn']);
foreach($categories as $category_data) {
$category = explode(':',$category_data);
?>
<li><a href="#<?php echo $category[0]; // here you get category id ?>" <?php echo $category[1]; // here you get category name ?></a></li>
<li class="divider"></li>
<?php } ?>
</ul>
</li>
<?php } ?>
我希望你现在掌握了从mysql查询中可以获得的内容,以及你可以用php中的数据做些什么。
我没有测试过代码,但它应该可以立即使用。
周到的想法,你是否使用 Laravel ?
上面提到的 Laravel 的原因是没有意义的,你可以通过模型关系实现相同的结果,比如你提到的刀片......
上面提到的代码是可移植的,这意味着您可以在任何 php 项目中使用它,我相信这就是您的问题......
第二个想法......
请记住,在mysql中加入类别会为您带来一个类别而不是全部...
此示例是关于在菜单中显示所有类别的标记...
最后不要避免 Laravel ,因为它是美丽独一无二......:)