我与产品和图片有关系。用户可以上传产品的许多图像,因此我有一个产品表和product_images表。
当我尝试从数据库中获取图像时,我的视图中没有可用的图像。但我能够保存到我的数据库中的路径属性。
为什么会发生这种情况?
product_images
id
product_id
path
产品
public function images()
{
return $this->hasMany(Image::class);
}
图片
public function products()
{
return $this->belongsTo(Product::class);
}
控制器
public function index()
{
$products = Product::where('type', 'BASIC')->inRandomOrder()->take(6)->get();
return view('home.index',compact('products');
}
$product_image = Product::create($request->all());
if ($request->hasFile('image'))
{
$request->file('image')->store('uploads/catalog/images');
// ensure every image has a different name
$file_name = $request->file('image')->hashName();
// save new image $file_name to database
$product_image->images()->update(['image' => $file_name]);
}
查看
@foreach($products as $product)
@foreach($product->image as $img)
<div class="product-item men">
<div class="product discount product_filter">
<div class="product_image">
<a href="{{ route('product.view', $product->slug)}}"><img src="{{$img}}" alt=""></a>
</div>
<!-- <div class="favorite favorite_left"></div> -->
<!-- <div class="product_bubble product_bubble_right product_bubble_red d-flex flex-column align-items-center"><span>offer</span></div> -->
<div class="product_info">
<h6 class="product_name"><a href="{{ route('product.view', $product->slug)}}">{{$product->name}}</a></h6>
</div>
</div>
</div>
@endforeach
@endforeach
DD($张图片)
ProductImage {#523 ▼
#fillable: array:3 [▼
0 => "product_id"
1 => "path"
2 => "is_main_image"
]
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:6 [▼
"id" => 1
"product_id" => 1
"path" => "/Users/emmnock/laravel-ecommerce/public/uploads/catalog/ZsT4VwjWS5tLvIl0AKV6sAOxHFrwzwII5FMVUVkP.png"
"is_main_image" => null
"created_at" => "2018-03-07 10:04:34"
"updated_at" => "2018-03-07 10:04:34"
]
#original: array:6 [▶]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
答案 0 :(得分:0)
如果您的图片位于new TextField(
textAlign: TextAlign.center,
decoration: new InputDecoration(
hintText: '1',
border: new OutlineInputBorder(
borderRadius: const BorderRadius.all(
const Radius.circular(0.0),
),
borderSide: new BorderSide(
color: Colors.black,
width: 1.0,
),
),
),
)
文件夹中,请使用public
这是一个例子
asset()
也在你的<img src="{{ asset(str_replace(app_path(),'',$img->path))}}" alt="">
中
使用下面给出的代码
foreach
如果是存储文件夹,则将图像移动到存储,然后使用asset()或创建符号链接
使用 @foreach($product->images as $img)
希望这有帮助
答案 1 :(得分:0)
您无法使用img
对象来回应它。 Image
必须包含url
或path
等属性,因此您只能输出它们。看起来你在path
属性中存储完整路径(为什么?)。
$url = str_replace(public_path(), "", $img->path);
<img src="{{ $url }}" alt="">
如果您将文件名存储为图像属性,那么请获取URL。
<img src="{{ Storage::url($img->path_to_file) }}" alt="">
答案 2 :(得分:0)
您的问题是如何在数据库中存储图像。
$request->file('image')->store('uploads/catalog/images');
// ensure every image has a different name
$file_name = $request->file('image')->hashName();
// save new image $file_name to database
$product_image->images()->update(['image' => $file_name]);
您正在使用store()
保存文件,然后使用hashName()
生成了一个新文件名,这与存储在'uploads/catalog/images'
中的图像文件没有任何关系
正确的方法是获取store()
方法返回的存储图像的完整路径,并将其保存在数据库中。
$image_path = $request->file('image')->store('uploads/catalog/images');
$product_image->images()->update(['image' => $image_path]);